Kev*_*ith 9 c# asp.net-core asp.net-core-3.1
我在 asp.net core 3.1 控制器中有以下操作
[ApiController]
[Route("example")]
public class MyExampleController : ControllerBase
{
[HttpPost("{id}/value")]
public async Task<IActionResult> Post(string id, [FromBody] int? value)
=> Task.FromResult(Ok());
}
Run Code Online (Sandbox Code Playgroud)
这工作得很好,如果我发布为int的身体值(例如:1,2,等...)
但是,我找不到null传入值的方法。
如果我传入一个空的正文或null正文,我会得到 400 的状态代码,并带有返回的验证消息A non-empty request body is required.。
我还尝试将value参数更改为可选参数,默认值为null:
public async Task<IActionResult> Post(string id, [FromBody] int? value = null)
Run Code Online (Sandbox Code Playgroud)
如何将 null 传递给此操作?
Kev*_*ith 15
终于弄明白了,非常感谢@Nkosi 和@KirkLarkin 帮助找到了这个问题。
在将Startup.cs 控制器配置到容器中时,我们只需要将默认的 mvc 选项更改为AllowEmptyInputInBodyModelBinding
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(x => x.AllowEmptyInputInBodyModelBinding = true);
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我们可以传入null帖子的正文,并且效果很好。它还通过属性应用正常的模型验证,而无需手动检查 ModelState:
public async Task<IActionResult> Post(string id,
[FromBody][Range(1, int.MaxValue, ErrorMessage = "Please enter a value bigger than 1")]
int? value = null)
Run Code Online (Sandbox Code Playgroud)
该
[ApiController]属性使模型验证错误自动触发 HTTP 400 响应
这将解释返回的响应。
删除[ApiController]以允许无效请求仍然使其成为控制器操作,并且如果具有该属性的附加功能对当前控制器不重要。
然而,它需要手动应用所需的功能
[Route("example")]
public class MyExampleController : ControllerBase {
[HttpPost("{id}/value")]
public async Task<IActionResult> Post(string id, [FromBody] int? value) {
if (!ModelState.IsValid) {
//...
return BadRequest(ModelState);
}
//...
return Ok();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5841 次 |
| 最近记录: |