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

时间:2019-02-15 15:43:35

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

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

我想用招摇的方式向消费者展示用法,并提供一些有关我的Web API的有用信息。 但是,Swagger崩溃并显示以下错误:

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

问题在于Swagger试图分析DevExpress的 QueryBuilderController 中包含的API。但是,我不想大张旗鼓地分析这些第三方控制器。 我现在的问题是如何迅速地过滤/禁用第三方库?

谢谢 斯文

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" });
});

答案 1 :(得分:0)

您可以使用Swaggers DocumentFilter实现这一目标,下面是一个示例:DocumentFilter usage example