Игнорировать действия стороннего контроллера в Swagger

У меня есть веб-приложение ASP.NET Core 2.1, которое обслуживает отчеты DevExpress через интерфейс веб-API.

Я хотел бы использовать чванство, чтобы показать потребителям использование и предоставить некоторую полезную информацию о моем веб-API. Однако Swagger вылетает со следующей ошибкой:

NotSupportedException: неоднозначный HTTP-метод действия - DevExpress.AspNetCore.Reporting.QueryBuilder.QueryBuilderController.Invoke (DevExpress.AspNetCore.Reporting.v18.2). Действия требуют явной привязки HttpMethod для Swagger 2.0

Проблема в том, что Swagger пытается проанализировать API, содержащийся в QueryBuilderController DevExpress. Однако я не хочу, чтобы чванство анализировало эти сторонние контроллеры. Мой вопрос теперь в том, как отфильтровать / отключить сторонние библиотеки в чванстве?

Спасибо, Свен


person Sven    schedule 15.02.2019    source источник


Ответы (2)


Я получил его, используя настраиваемый DocInclusionPredicate, как здесь.

Пример кода:

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" });
});
person Sven    schedule 19.02.2019

Для этого можно использовать Swaggers DocumentFilter, вот пример: Пример использования DocumentFilter

person Moien Tajik    schedule 15.02.2019
comment
Спасибо за ваше предложение, я попробовал с некоторыми изменениями, чтобы это работало в .Net Core, но это не работает - person Sven; 18.02.2019