为什么在使用 HttpClient posting 时我的 post 数据全部为空?
Why is my post data all null when posting with HttpClient?
我正在尝试 post 一个对象从客户端 Web 应用程序到所述客户端的 CRUD API。我正在使用以下代码发出 post 请求:
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 为 null 等
我的 HttpClient
设置如下:
_client.BaseAddress = _config["Api:Url"];
_client.DefaultRequestHeaders.Clear();
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
我确实尝试将 person
参数类型设置为 string
以查看是否可以看到原始 JSON,但 person
参数本身为空。
我做错了什么?
已添加:Person
class 如下所示:
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"
}
您需要明确告诉框架到哪里寻找传入数据以绑定到模型。在参数上使用 [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();
}
我正在尝试 post 一个对象从客户端 Web 应用程序到所述客户端的 CRUD API。我正在使用以下代码发出 post 请求:
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 为 null 等
我的 HttpClient
设置如下:
_client.BaseAddress = _config["Api:Url"];
_client.DefaultRequestHeaders.Clear();
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
我确实尝试将 person
参数类型设置为 string
以查看是否可以看到原始 JSON,但 person
参数本身为空。
我做错了什么?
已添加:Person
class 如下所示:
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"
}
您需要明确告诉框架到哪里寻找传入数据以绑定到模型。在参数上使用 [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();
}