如何映射Twilio商务WhatsApp webhook动态生成的媒体属性列表
实现方案
方案1:直接在接口逻辑中处理(快速实现)
你可以直接通过Request.Form读取动态键名的参数,循环赋值给MediaList即可,修改你注释位置的代码如下:
if (numAdjuntos > 0) { // 初始化集合 whatsAppMessage.MediaList = new List<string>(numAdjuntos); for (int i = 0; i < numAdjuntos; i++) { // 拼接动态参数名 string mediaParamKey = $"MediaUrl{i}"; // 校验参数是否存在,避免空引用报错 if (Request.Form.ContainsKey(mediaParamKey)) { whatsAppMessage.MediaList.Add(Request.Form[mediaParamKey].ToString()); } } }
后续你就可以直接使用whatsAppMessage.MediaList遍历所有媒体链接。
方案2:自定义模型绑定(更规范,可复用)
如果你希望映射逻辑自动完成,不需要每次写接口都重复处理,可以自定义模型绑定器:
- 首先创建绑定器类:
public class WhatsAppMessageBinder : IModelBinder { public Task BindModelAsync(ModelBindingContext bindingContext) { if (bindingContext == null) throw new ArgumentNullException(nameof(bindingContext)); var form = bindingContext.HttpContext.Request.Form; var model = new WhatsAppMessage { MessageSid = form[nameof(WhatsAppMessage.MessageSid)], AccountSid = form[nameof(WhatsAppMessage.AccountSid)], MessagingServiceSid = form[nameof(WhatsAppMessage.MessagingServiceSid)], From = form[nameof(WhatsAppMessage.From)], To = form[nameof(WhatsAppMessage.To)], Body = form[nameof(WhatsAppMessage.Body)], NumMedia = form[nameof(WhatsAppMessage.NumMedia)] }; // 自动处理媒体列表映射 if (int.TryParse(model.NumMedia, out int numMedia) && numMedia > 0) { model.MediaList = new List<string>(numMedia); for (int i = 0; i < numMedia; i++) { var key = $"MediaUrl{i}"; if (form.ContainsKey(key)) model.MediaList.Add(form[key].ToString()); } } else { model.MediaList = new List<string>(); } bindingContext.Result = ModelBindingResult.Success(model); return Task.CompletedTask; } }
- 给你的
WhatsAppMessage模型加上绑定器特性:
[ModelBinder(typeof(WhatsAppMessageBinder))] public class WhatsAppMessage { // 原有属性不变 public string MessageSid { get; set; } public string AccountSid { get; set; } public string MessagingServiceSid { get; set; } public string From { get; set; } public string To { get; set; } public string Body { get; set; } public string NumMedia { get; set; } public List<string> MediaList { get; set; } }
配置完成后,你不需要在接口中写任何额外处理逻辑,拿到的whatsAppMessage对象的MediaList就已经自动填充好了。
内容的提问来源于stack exchange,提问作者AcidRod75
相关产品推荐
相关产品推荐

