我正在尝试将客户端Web应用程序中的对象发布到所述客户端的CRUD API。我使用以下代码来发布帖子请求:
var respP = await _client.PostAsync("api/Persons", new StringContent(JsonConvert.SerializeObject(person), Encoding.UTF8, "application/json"));
API动作方法很简单:
[HttpPost]
public async Task Post(Person person)
{
_db.Add(person);
await _db.SaveChangesAsync();
}
我在_db.Add(person);
上有一个断点,当它被点击时,我看到Person
中有一个非空person
实例,但是所有字段都是默认值,即nullables是等等。
我按如下方式设置HttpClient
:
_client.BaseAddress = _config["Api:Url"];
_client.DefaultRequestHeaders.Clear();
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
我确实尝试制作person
参数类型string
以查看是否可以看到原始JSON,但person
参数本身也是空的。
我在这里做错了什么?
ADDED:Person
类如下所示:
public class Person
{
[Key]
public int PersonId { get; set; }
[Required(AllowEmptyStrings = false)]
[StringLength(128)]
public string LastName { get; set; }
[Required(AllowEmptyStrings = false)]
[StringLength(128)]
public string FirstName { get; set; }
[Column(TypeName = "date")]
public DateTime BirthDate { get; set; }
[Required(AllowEmptyStrings = false)]
[StringLength(13)]
public string IdNumber { get; set; }
}
并且传递的实际JSON是:
{
"PersonId": 0,
"LastName": "df",
"FirstName": "dfzg",
"BirthDate": "2017-12-01T00:00:00",
"IdNumber": "0000000000000"
}
答案 0 :(得分:0)
您需要明确告诉框架在哪里查找要绑定到模型的传入数据。在参数上使用[FromBody]
属性来绑定请求正文中的数据
注意:接受用户输入的操作应检查ModelState.IsValid
属性。
[HttpPost]
public async Task<IActionResult> Post([FromBody]Person person) {
if(ModelState.IsValid) {
_db.Add(person);
await _db.SaveChangesAsync();
return Ok();
}
return BadRequest();
}