如何在.NET Web API应用程序中与Swagger一起使用FluentValidation?

时间:2016-03-16 15:19:32

标签: asp.net-web-api swagger fluentvalidation swashbuckle

我有一个.NET Web API项目。我可以通过安装Swashbuckle NuGet包来添加Swagger。 Swagger现在提供了一个很好的网页,通过访问此网址提供文档和测试能力: http://localhost:20475/product-catalog-api/swagger/ui/index 这部分效果很好。但是,当我添加FluentValidation并在WebApiConfig.cs中设置它时,对我网站的所有请求都获得了高位,而不是看到Swagger html页面,我只得到一个空响应的JSON。

我使用Matthew Jones撰写的这篇文章来设置FluentValidation: http://www.exceptionnotfound.net/custom-validation-in-asp-net-web-api-with-fluentvalidation/

这是我的web api配置的样子:

public static void Register(HttpConfiguration config)
{
    // Web API configuration and services
    config.Filters.Add(new ValidateModelStateFilter());
    config.MessageHandlers.Add(new ResponseWrappingHandler());

    // Web API routes
    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: Version + "/{action}",
        defaults: new {controller = "Main"}
    );

    FluentValidationModelValidatorProvider.Configure(config);
}

我可以在每个Web服务方法中手动触发FluentValidation,但我希望像Matthew Jones那样使用Filters和MessageHandler这样的通用解决方案。基本上我想要做的就是说如果请求是swagger-ui那么就不要通过FluentValidation进行路由。

1 个答案:

答案 0 :(得分:4)

我最终在Private Sub UserForm_Initialize() Let list1 = Array() For j = 0 To 67 list1(j) = Sheet2.Cells(2+j, 1) Next Let colors = Array("Blue", "Black", "Gold", "Green") ComboBox1.List = list1 ListBox1.List = colors End Sub 内添加了此代码。可能有更优雅的方式,但这对我有用。这会导致swagger页面请求退出FluentValidation挂钩。

ResponseWrappingHandler