如果modelstate无效,则动作过滤器不运行

时间:2018-10-07 11:57:11

标签: c# asp.net-core

我正在尝试构建一个自定义操作过滤器,该过滤器应拦截modelstate并根据当前状态(有效或无效)执行某些操作。但是,经过一些检查之后,我意识到动作过滤器仅在modelstate已经有效的情况下才运行。如果存在输入视图模型的所有条目。

一个例子是我的身份验证json。它具有用户名,密码和密钥。

{
    "Email": "user@apppp.com",
    "Password": "password",
    "SecretKey":""
}

上面的一个是modelstate无效的,因为需要密钥。因此,动作过滤器无法运行

{
    "Email": "user@apppp.com",
    "Password": "password",
    "SecretKey":"abc"
}

这第二个是模型状态有效的,因此动作过滤器运行。但是,我想做的是触发动作过滤器,即使该过滤器无效。我该如何覆盖?

ActionFilter

public class ModelValidationAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        if (!context.ModelState.IsValid)
        {
            //context.Result = new ValidationFailedResult(context.ModelState);
            context.Result = new OkObjectResult("Hello");
        }
        else
        {
            context.Result = new OkObjectResult("Bye");
        }
    }
}

1 个答案:

答案 0 :(得分:5)

ASP.NET Core 2.1带有一个polymer test属性,该属性在默认模板中使用,并将模型验证添加到给定控制器的所有操作中。

可以在启动过程中通过javac全局禁用它:

[ApiController]