自定义 ASP.Net 核心 JSON 模型活页夹
Custom ASP.Net Core JSON model binder
我的 posted 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 对象的自定义模型活页夹,我将不胜感激。
问题是您实际上是在向控制器发送一个包含一个 属性 命名电子邮件的对象,而不是一个数组
选项一:
客户端对象只需要包含数组
[
{
"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; }
}
然后在controller方法中,使用model,从body中读取
public async Task<IActionResult> Send([FromBody]RequestModel emails)
我的 posted 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 对象的自定义模型活页夹,我将不胜感激。
问题是您实际上是在向控制器发送一个包含一个 属性 命名电子邮件的对象,而不是一个数组
选项一: 客户端对象只需要包含数组
[
{
"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; }
}
然后在controller方法中,使用model,从body中读取
public async Task<IActionResult> Send([FromBody]RequestModel emails)