带方括号的模型绑定 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 值的主要内容,如果未能解决你的问题,请参考以下文章