我的项目:ASP.Net Web Api,Dot.Net Core 2.0,VS 2017。
这是我的模特
public class AddressData
{
public string id { get; set; }
public string address { get; set; }
public int number { get; set; }
public string complement { get; set; }
}
这是我的控制人
[Route("api/[controller]")]
public class ValuesController : Controller
{
[HttpPost]
public IActionResult Post([FromBody] List<AddressData> value)
{
if (value == null)
return BadRequest();
return Ok();
}
}
这是我的杰森:
{
"value" : [
{
"id" : "08921619810",
"address" : "ilicinia",
"number" : 154,
"complement": ""
},
{
"id" : "12345678910",
"address" : "candido figueiredo",
"number" : 581,
"complement": "ap 15"
}
]
}
请求参数“值”始终为NULL。如果我将控制器方法签名更改为
[HttpPost]
public IActionResult Post([FromBody] AddressData value)
删除并使用以下Json
{
"id" : "08921619810",
"address" : "ilicinia",
"number" : 154,
"complement": ""
}
一切正常。如果我更改为[FromForm],则可以使用,但是对象列表不包含任何元素(Count属性= 0)。
我使用的是Postman,配置为在“ application / json”中发送内容类型的POST消息。
有人可以告诉我我在哪里做错了吗?
答案 0 :(得分:3)
您要在JSON中发送的对象与您要反序列化到的C#POCO对象之间不匹配。您要发送的JSON不是AddressData列表,而是一个看起来像C#的对象:
using System;
using System.Collections.Generic;
namespace Yournamespace
{
public class AddressDataList
{
public List<AddressData> value { get; set; }
}
public class AddressData
{
public string id { get; set; }
public string address { get; set; }
public int number { get; set; }
public string complement { get; set; }
}
}
如果您将控制器更改为接受AddressDataList
,则它现在应该正确反序列化:
[Route("api/[controller]")]
public class ValuesController : Controller
{
[HttpPost]
public IActionResult Post([FromBody] AddressDataList addressDataList)
{
if (addressDataList == null)
return BadRequest();
return Ok();
}
}