You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何映射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:自定义模型绑定(更规范,可复用)

如果你希望映射逻辑自动完成,不需要每次写接口都重复处理,可以自定义模型绑定器:

  1. 首先创建绑定器类:
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;
    }
}
  1. 给你的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:27:04