我正在尝试构建一个自定义操作过滤器,该过滤器应拦截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");
}
}
}
答案 0 :(得分:5)
ASP.NET Core 2.1带有一个polymer test
属性,该属性在默认模板中使用,并将模型验证添加到给定控制器的所有操作中。
可以在启动过程中通过javac
全局禁用它:
[ApiController]