背景
我有一个用asp.net core v2.1编写的web api。这是我的服务公开的功能:
[HttpPost]
[Route("submit")]
public async Task<ActionResult<int>> DoIt(CustomModel model)
{
if (!ModelState.IsValid)
return new StatusCodeResult(403); // Custom 403 will be here.
// ...
}
这就是
CustomModel
:
public class CustomModel
{
[Required]
public int MagicNumber { get; set; }
}
这种组合(方法+模型)在客户不提供
MagicNumber
到服务器。
问题
与旧的asp.net(.net framework)不同,当模型验证失败时,会自动向客户端发送403错误消息。
我想防止这种默认行为,并给用户一个自定义的错误消息。我更喜欢这样定义自定义响应:
[HttpPost]
[Route("submit")]
public async Task<ActionResult<int>> Submit(CustomModel model)
{
if (!ModelState.IsValid)
return new CustomErrorCode_BadRequest();
//...
}
我试过的东西
Startup.cs
文件
services.AddMvc(options => options.ModelValidatorProviders.Clear());
if (!ModelState.IsValid)
声明。在此之前,请求在前面的步骤中被阻止。不幸的是
ModelState.IsValid
始终返回
true
(无论输入是什么)。我想这是因为我“清除”了所有的验证器-这听起来是个坏主意。
应该怎么做?
谢谢!