Asp.net核心API方法调用的fluent API验证失败



我已经使用Aspnet Core和Mediator实现了Fluent API验证,并禁用了默认的MVC验证。以前,对于无效数据,将首先调用API验证,然后调用API方法。

对于无效数据,Fluent API验证将抛出错误,并且不会触发对API方法的调用。

但现在,即使在无效数据上,也会调用api方法。我错过了什么?

配置:

services.AddMvc().AddFluentValidation(fv =>
{
fv.RunDefaultMvcValidationAfterFluentValidationExecutes = false;
});
ValidatorOptions.Global.CascadeMode = CascadeMode.StopOnFirstFailure;
services.AddValidatorsFromAssembly(Assembly.GetExecutingAssembly());

代码:

public class LoginCommandValidator : AbstractValidator<LoginCommand>
{
public LoginCommandValidator(IStringLocalizer<Resource> stringLocalizer)
{
this.CascadeMode = CascadeMode.StopOnFirstFailure;

RuleFor(v => v.Username)
.NotEmpty().WithMessage(stringLocalizer["InvalidUsername"])
.NotNull().WithMessage(stringLocalizer["InvalidUsername"]);

RuleFor(v=>v.Password)
.NotEmpty().WithMessage(stringLocalizer["InvalidPassword"])
.NotNull().WithMessage(stringLocalizer["InvalidPassword"]);
}
}

也许您可以编写一个ActionFilterAttribute,然后将此筛选器添加到您的控制器中。像这样:

public class ValidateModelStateFilter : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (!actionContext.ModelState.IsValid)
{
actionContext.Response = actionContext.Request.CreteErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState);
}
}
}

然后在你的控制器上添加这个过滤器:

[ValidateModelStateFilter]

希望这能帮助到你。

最新更新