我有一个ASP.NET Core API (.Net Core 2.1),并且我使用这篇文章实现了一个Action Filter。
在我的模型中,我使用数据注释来验证模型,并在我的控制器中为操作添加了ValidateModel属性。
我使用Postman进行测试,只有在模型有效时才会调用我的Action Filter。如果我的请求缺少必填字段或某些值超出范围,则Action Filter不会被调用。相反,我会收到一个带有响应中模型状态的400错误请求。
我实现了Action Filter,因为我想自定义我的模型验证错误。我的理解是,在模型绑定时调用Action Filters。有人能帮我找出原因并告诉我如何使Action Filter起作用吗?
更新:发布问题后的2秒钟,我找到了解决方案,@Silvermind下面发布的链接也是很好的信息。
我在Startup.cs中添加了以下行:
[HttpPost("CreateShipment")]
[ValidateModel]
public IActionResult CreateShipment([FromBody] CreateShipmentRequest request)
{
if (ModelState.IsValid)
{
//Do something
}
return Ok();
}
我使用Postman进行测试,只有在模型有效时才会调用我的Action Filter。如果我的请求缺少必填字段或某些值超出范围,则Action Filter不会被调用。相反,我会收到一个带有响应中模型状态的400错误请求。
我实现了Action Filter,因为我想自定义我的模型验证错误。我的理解是,在模型绑定时调用Action Filters。有人能帮我找出原因并告诉我如何使Action Filter起作用吗?
更新:发布问题后的2秒钟,我找到了解决方案,@Silvermind下面发布的链接也是很好的信息。
我在Startup.cs中添加了以下行:
services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
这在微软网站上有充分的文件记录。https://learn.microsoft.com/en-us/aspnet/core/web-api/index?view=aspnetcore-2.1#automatic-http-400-responses
[ApiController]
属性会自动被添加到控制器上。它会自动进行一些操作;如果移除该属性,则可以解决这个问题。请查看此文章获取更多信息:Exploring the ApiControllerAttribute and its features for ASP.NET Core MVC 2.1。 - Silvermind