Создание документации Swagger / Swashbuckle только для контроллеров API в основном приложении MVC

У нас есть приложение ASP.NET MVC Core с обычными контроллерами MVC. Кроме того, у нас есть подпапка в папке Controllers под названием API, содержащая небольшое количество контроллеров API.

Мы используем метод .IncludeXmlComments в .AddSwaggerGen, чтобы получить документацию XML в нашем проекте.

Однако он также принимает XML для всех наших обычных контроллеров.

Есть ли способ отфильтровать «обычные» контроллеры или иным образом выбрать только контроллеры API для включения в документацию swagger?


person SimonGoldstone    schedule 08.09.2020    source источник


Ответы (1)


Взгляните на DocInclusionPredicate, это должно решить вашу проблему ????

// Startup.cs
services.AddSwaggerGen(options => 
    options.DocInclusionPredicate((docName, apiDesc) =>
    {
        if (!apiDesc.TryGetMethodInfo(out MethodInfo methodInfo)) return false;

        // Check if methodInfo is in the right assembly
        // or has the right namespace or version etc.
        bool isMethodIncluded = /* true or false */;

        return isMethodIncluded ;
    });
);
person Bruno Martins    schedule 09.09.2020
comment
Отлично работает, спасибо. В моем случае решение, которое я хотел, было следующее: return methodInfo.DeclaringType.GetCustomAttributes<Microsoft.AspNetCore.Mvc.ApiControllerAttribute>(true).Any(); Итак, если контроллер украшен атрибутом ApiControllerAttribute, включите его в документацию Swagger, иначе игнорируйте. Работает отлично. - person SimonGoldstone; 09.09.2020