忽略 Swagger 中的第 3 方控制器操作

Ignore 3rd party Controller Actions in Swagger

我有一个 ASP.NET 核心 2.1 Web 应用程序,它通过 Web API 界面提供 DevExpress 报告。

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

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

的显式 HttpMethod 绑定

问题是 Swagger 试图分析 DevExpress 的 QueryBuilderController 中包含的 API。但是,我不想大摇大摆地分析这些第 3 方控制器。 我现在的问题是如何 filter/disable 第 3 方库大摇大摆?

谢谢 斯文

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

我使用自定义 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" });
});