Kes*_*Kes 4 c# validation .net-core-2.1
在最新的.NET Core 2.1中,引入了模型状态验证的自动验证(https://blogs.msdn.microsoft.com/webdev/2018/02/02/asp-net-core-2-1-roadmap /#mvc).
以前我可以通过以下代码覆盖验证错误响应:
public class ApiValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
context.Result = new BadRequestObjectResult(new context.ModelState);
}
base.OnActionExecuting(context);
}
Run Code Online (Sandbox Code Playgroud)
但现在它已经不再适用了.无需输入覆盖方法即可响应验证错误.
有人有任何线索吗?谢谢.
Zou*_*out 11
如果您想继续使用该ApiController属性(具有其他功能,如禁用传统路由并允许模型绑定而不添加[FromBody]参数属性),您可以通过此Startup.cs文件在您的文件中执行此操作:
services.Configure<ApiBehaviorOptions>(opt =>
{
opt.SuppressModelStateInvalidFilter = true;
});
Run Code Online (Sandbox Code Playgroud)
这将使得如果ModelState无效,它将不会自动返回400错误.
最近一位朋友问我这个问题,我的方法是用ModalStateInvalidFilter自定义的替换默认值。
在我的测试中,我从这里实施了建议,然后:
services.AddMvc(options =>
{
options.Filters.Add(typeof(ValidateModelAttribute));
});
services.Configure<ApiBehaviorOptions>(options => { options.SuppressModelStateInvalidFilter = true; });
Run Code Online (Sandbox Code Playgroud)