【问题标题】:How do I use FluentValidation alongside Swagger in .NET Web API application?如何在 .NET Web API 应用程序中使用 FluentValidation 和 Swagger?
【发布时间】:2023-04-11 08:38:01
【问题描述】:

我有一个 .NET Web API 项目。我可以通过安装 Swashbuckle NuGet 包来添加 Swagger。 Swagger 现在制作了一个不错的网页,提供文档和通过访问以下 url 进行测试的能力: 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 对过滤器和消息处理程序所做的那样。基本上我想做的是说如果请求是针对 swagger-ui 的,那么不要通过 FluentValidation 路由。

【问题讨论】:

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


    【解决方案1】:

    我最终在ResponseWrappingHandler 中添加了这段代码。可能有更优雅的方式,但这对我有用。这会导致 swagger 页面请求退出 FluentValidation 钩子。

    if (request.RequestUri.AbsolutePath.Contains("swagger"))
    {
        return response;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多