带方括号的模型绑定 POST 值

Posted

技术标签:

【中文标题】带方括号的模型绑定 POST 值【英文标题】:Model binding POST values with square brackets 【发布时间】:2018-11-26 01:26:04 【问题描述】:

如何将名为“data[email]”的 POST 参数绑定到 Asp.Net MVC 中的模型?

发布的数据:

type=subscribe&data%5Bemail%5D=my%40iemail.com

没有url编码:

type=subscribe&data[email]=my@email.com

我要绑定的模型:

public class MyModel

  public string type get;set;
  public string dataemail get;set; //What do I do here to 

接收POST的方法:

public ActionResult Post(MyModel payload)

    return Ok(payload);

背景:

MailChimp 将 POST 用于 webhook,并在其中返回一些带有方括号的值。我不知道如何建模绑定它。

我可以使用 Request.Form,但是……我更愿意使用模型绑定。

【问题讨论】:

【参考方案1】:

更新模型data 属性以使用字典

public class MyModel 
    public string type  get; set; 
    public Dictionary<string, string> data  get; set; 

访问电子邮件将通过字典来完成,例如

var email = payload.data["email"];

【讨论】:

供将来参考,其他可能会看到的...这对于上面的示例非常有效,但很有可能,您正在寻找一种方法来解析 Mailchimp webhook 有效负载 - 上面的工作对于很多字段,但不适用于“合并”字段,例如:data[merges][FNAME]。我最终放弃并使用了 Request.Form["data[merges][FNAME]"].ToString() ,它工作得很好,但不如模型绑定优雅。 @Kjensen 您可以考虑创建一个自定义模型绑定器,该绑定器将遍历 Form 数组并构造一个强类型模型。 docs.microsoft.com/en-us/aspnet/core/mvc/advanced/… 是的,我确实考虑过,但它似乎有点过头了,所以我放弃了它。但是谢谢:)

以上是关于带方括号的模型绑定 POST 值的主要内容,如果未能解决你的问题,请参考以下文章

将 MySQL 中的值列表转换为带方括号的数组

ASP.NET MVC 方括号集合模型绑定

属性值绑定:方括号 vs 大括号

Webapi接收带括号的json

JavaScript 中怎么不带括号的调用函数

编写一个不带括号的列表的字典值