如果modelstate无效,则Action Filter不会运行

Jia*_*nYA 2 c# asp.net-core

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

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

{
    "Email": "user@apppp.com",
    "Password": "password",
    "SecretKey":""
}
Run Code Online (Sandbox Code Playgroud)

上面的那个是模型状态无效,因为需要密钥.因此,动作过滤器不会运行

{
    "Email": "user@apppp.com",
    "Password": "password",
    "SecretKey":"abc"
}
Run Code Online (Sandbox Code Playgroud)

第二个是modelstate有效,因此动作过滤器运行.但是,我想要做的是触发我的动作过滤器,即使它无效.我怎么能覆盖那个?

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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Tse*_*eng 7

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

它可以ApiBehaviorOptions在启动期间全局禁用:

services.Configure<ApiBehaviorOptions>(options =>
{
    options.SuppressModelStateInvalidFilter = true;
});
Run Code Online (Sandbox Code Playgroud)