如何将FluentValidator挂钩到Web API?

Mar*_*rty 30 c# fluentvalidation asp.net-web-api

我正在尝试将Fluent验证连接到我的MVC WEB Api项目,它不想工作.

当我使用MyController : Controller- >工作正常(ModelState.IsValid返回False)

但是当我使用MyController :ApiController......没什么.

有没有人有关于如何挂钩的经验?

Dmi*_*try 19

最新版的Fluent Validation(5.0.0.1)支持web api

只需从Nuget安装它并在Global.asax中注册它,如下所示:

using FluentValidation.Mvc.WebApi;

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        ...
        FluentValidationModelValidatorProvider.Configure();
    }
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*rty 14

答案就在这个拉取请求中.

基本上您需要实现自定义ModelValidationProvider.

还有几点需要注意:

  1. Web API不能与System.Web.Mvc命名空间中的modelValidator一起使用,只能使用System.Web.Http中的那些,如下所示:

    使用自定义DataAnnotationsModelValidatorProvider进行服务器端验证

  2. 你不要像这样添加它:

    ModelValidatorProviders.Providers.Add(new WebApiFluentValidationModelValidatorProvider());`
    
    Run Code Online (Sandbox Code Playgroud)

    但是这样:

    GlobalConfiguration.Configuration.Services.Add(typeof(System.Web.Http.Validation.ModelValidatorProvider), new WebApiFluentValidationModelValidatorProvider());`
    
    Run Code Online (Sandbox Code Playgroud)

  • 只是一个评论.如果您使用像Ninject这样的DI容器,则上述操作无效.您必须在您的DI配置中添加绑定.将类似于以下内容:`kernel.Bind <System.Web.Http.Validation.ModelValidatorProvider>().To <WebApiFluentValidationModelValidatorProvider>();``kernel.Bind <IValidatorFactory>().To <NinjectValidatorFactory>(). InSingletonScope();` (3认同)