使用HttpClient发布时,为什么我的帖子数据全为空?

问题描述 投票:1回答:1

我试图将客户端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中有一个非null的person实例,但所有字段都是默认值,即nullables为null等。

我按如下方式设置了HttpClient

_client.BaseAddress = _config["Api:Url"];
_client.DefaultRequestHeaders.Clear();
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

我确实尝试制作person参数类型string,看看我是否能看到原始JSON,而且person param本身也是null。

我在这做错了什么?

增加: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"
}
c# asp.net-core .net-core dotnet-httpclient asp.net-core-2.0
1个回答
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();
}

参考Model Binding

© www.soinside.com 2019 - 2024. All rights reserved.