忽略 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" });
});
我有一个 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" });
});