【问题标题】:Ignore 3rd party Controller Actions in Swagger忽略 Swagger 中的 3rd 方控制器操作
【发布时间】:2019-07-09 19:03:24
【问题描述】:

我有一个 ASP.NET Core 2.1 Web 应用程序,它通过 Web API 接口提供 DevExpress 报告。

我想使用 swagger 向消费者展示使用情况并提供一些关于我的 Web API 的有用信息。 但是,Swagger 崩溃并出现以下错误:

NotSupportedException:不明确的 HTTP 操作方法 - DevExpress.AspNetCore.Reporting.QueryBuilder.QueryBuilderController.Invoke (DevExpress.AspNetCore.Reporting.v18.2)。操作需要 Swagger 2.0 的显式 HttpMethod 绑定

问题在于 Swagger 试图分析 DevExpress 的 QueryBuilderController 中包含的 API。但是,我不想大摇大摆地分析这些 3rd 方控制器。 我现在的问题是如何在 swagger 中过滤/禁用 3rd 方库?

谢谢 斯文

【问题讨论】:

    标签: asp.net-core swagger swagger-2.0


    【解决方案1】:

    我使用自定义 DocInclusionPredicate 作为 suggested here 让它工作。

    示例代码:

    services.AddSwaggerGen(c =>
    {
          c.DocInclusionPredicate((docName, apiDesc) =>
          {
              // Filter out 3rd party controllers
              var assemblyName = ((ControllerActionDescriptor)apiDesc.ActionDescriptor).ControllerTypeInfo.Assembly.GetName().Name;
              var currentAssemblyName = GetType().Assembly.GetName().Name;
              return currentAssemblyName == assemblyName;
          });
          c.SwaggerDoc("v1", new Info { Title = "FileService API", Version = "v1" });
    });
    

    【讨论】:

    • 在提出了很多需要在我无法控制的库中更改代码的建议之后,这出现了。这是一个关键的答案,应该在谷歌中排名更高!
    【解决方案2】:

    您可以使用 Swaggers DocumentFilter 来实现这一点,这是一个示例:DocumentFilter usage example

    【讨论】:

    • 感谢您的建议,我尝试了一些更改以使其在 .Net Core 中运行 - 但它不起作用
    猜你喜欢
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 2021-08-08
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多