【问题标题】:Custom ASP.Net Core JSON model binder自定义 ASP.Net Core JSON 模型绑定器
【发布时间】:2018-05-22 10:09:53
【问题描述】:

我发布的 JSON 对象是这样的:

{{
 "emails": [
        {
          "To": "info@gmail.com",
          "Subject": "Subject",
          "Body": "Body",
          "ID": "d3d13242-6eff-4c57-b718-ef5ad49fe301"
        },
        {
          "To": "hr@gmail.com",
          "Subject": "Subject",
          "Body": "Body",
          "ID": "101edaf0-fcb4-48fc-9e9e-0d7492b591b0"
        }
      ]
}}

默认情况下,ASP.NET 模型绑定器不会绑定此 JSON 对象,正如您在此处看到的,当我向 API 发送 post 请求时,我总是得到 null:

[HttpPost, Route("Send")]
public async Task<IActionResult> Send(Email[] emails)
{
  var toSave = from email in emails
                         select new EmailQueueItem
                         {
                             Html = true,
                             To = email.To,
                             Subject = email.Subject,
                             Body = email.Body
                         };

   await Database.BulkInsert(toSave.ToArray());

   return Ok();
 }

emails 属性始终为 null。对于创建处理这种 JSON 对象的自定义模型绑定器的任何帮助,我将不胜感激。

【问题讨论】:

    标签: asp.net-core asp.net-core-mvc custom-model-binder


    【解决方案1】:

    问题是您实际上是在向控制器发送一个包含一个名为 emails 的属性的对象,而不是一个数组

    选项一: 客户端对象只需要包含数组

     [
        {
          "To": "info@gmail.com",
          "Subject": "Subject",
          "Body": "Body",
          "ID": "d3d13242-6eff-4c57-b718-ef5ad49fe301"
        },
        {
          "To": "hr@gmail.com",
          "Subject": "Subject",
          "Body": "Body",
          "ID": "101edaf0-fcb4-48fc-9e9e-0d7492b591b0"
        }
      ]
    

    然后从请求体中读取数组

    public async Task<IActionResult> Send([FromBody]Email[] emails)
    

    选项 2: 当你在客户端这样定义数组时

    {
      "emails":...
    }
    

    您需要通过定义一个包含名为 emails 的属性的模型来匹配控制器上的对象设置

    public class RequestModel
    {
        public Email[] emails { get; set; }
    }
    

    然后在控制器方法中,使用模型并从body中读取

    public async Task<IActionResult> Send([FromBody]RequestModel emails)
    

    【讨论】:

      猜你喜欢
      • 2017-02-09
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      • 2018-08-22
      • 1970-01-01
      • 2019-11-14
      • 2018-05-07
      • 2019-05-10
      相关资源
      最近更新 更多