发布的参数在 .NET Core 3.0 中变为空白 API
Posted parameter comes up blank in .NET Core 3.0 API
我创建了 ASP.net 核心 3.0 web API 应用程序并向其添加了 HttpPost
端点。
当我 post 使用 postman 到这个 post 端点时,端点没有得到我传递给它的 JSON 而是得到空值。
在具有 changed/broken HTTP post 端点的 .NET Core 3.0 中有什么变化吗?
JSON我post编辑:
{
"status": "0",
"operation":"",
"filter":"",
"currentOrderList": [
]
}
控制器代码:
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET: api/<controller>
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/<controller>/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
// POST api/<controller>
[HttpPost]
public void Post([FromBody]string value)
{
}
// PUT api/<controller>/5
[HttpPut("{id}")]
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/<controller>/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
我 post 想要的 url 是 https://localhost:44336/api/values。我可以看到在 visual studio 中调试期间方法被命中这一事实正在命中端点。唯一的问题是参数以 null
形式出现
创建一个模型来匹配给定的数据
public class MyClass {
[JsonProperty("status")]
public int Status { get; set; }
[JsonProperty("operation")]
public string Operation { get; set; }
[JsonProperty("filter")]
public string Filter { get; set; }
[JsonProperty("currentOrderList")]
public string[] CurrentOrderList { get; set; }
}
然后更新控制器操作以期望所需的类型
//POST api/values
[HttpPost]
public IActionResult Post([FromBody]MyClass value) {
if(ModelState.IsValid) {
//...
return Ok();
}
return BadRequest();
}
除了像 Nkosi 所说的添加 [JsonProperty]
注释外,我还必须添加 nuget 包
Microsoft.AspNetCore.Mvc.NewtonsoftJson
并将 .AddNewtonsoftJson()
附加到 Startup.cs。我在另一个 Whosebug 问题中发现了这一点,但这两个变化本身都不足以让我的模型水化。两者都需要它才能正常工作。
services.AddMvc().AddRazorRuntimeCompilation().AddNewtonsoftJson();
我创建了 ASP.net 核心 3.0 web API 应用程序并向其添加了 HttpPost
端点。
当我 post 使用 postman 到这个 post 端点时,端点没有得到我传递给它的 JSON 而是得到空值。
在具有 changed/broken HTTP post 端点的 .NET Core 3.0 中有什么变化吗?
JSON我post编辑:
{
"status": "0",
"operation":"",
"filter":"",
"currentOrderList": [
]
}
控制器代码:
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET: api/<controller>
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/<controller>/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
// POST api/<controller>
[HttpPost]
public void Post([FromBody]string value)
{
}
// PUT api/<controller>/5
[HttpPut("{id}")]
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/<controller>/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
我 post 想要的 url 是 https://localhost:44336/api/values。我可以看到在 visual studio 中调试期间方法被命中这一事实正在命中端点。唯一的问题是参数以 null
形式出现创建一个模型来匹配给定的数据
public class MyClass {
[JsonProperty("status")]
public int Status { get; set; }
[JsonProperty("operation")]
public string Operation { get; set; }
[JsonProperty("filter")]
public string Filter { get; set; }
[JsonProperty("currentOrderList")]
public string[] CurrentOrderList { get; set; }
}
然后更新控制器操作以期望所需的类型
//POST api/values
[HttpPost]
public IActionResult Post([FromBody]MyClass value) {
if(ModelState.IsValid) {
//...
return Ok();
}
return BadRequest();
}
除了像 Nkosi 所说的添加 [JsonProperty]
注释外,我还必须添加 nuget 包
Microsoft.AspNetCore.Mvc.NewtonsoftJson
并将 .AddNewtonsoftJson()
附加到 Startup.cs。我在另一个 Whosebug 问题中发现了这一点,但这两个变化本身都不足以让我的模型水化。两者都需要它才能正常工作。
services.AddMvc().AddRazorRuntimeCompilation().AddNewtonsoftJson();