仅针对MVC核心应用程序中的API控制器生成Swagger / Swashbuckle文档

问题描述

我们有一个带有常规MVC控制器的ASP.NET MVC Core应用程序。此外,我们在Controllers文件夹中有一个名为“ API”的子文件夹,其中包含少量API控制器。

我们正在.IncludeXmlComments中使用.AddSwaggerGen方法获取项目中的XML文档。

但是,它也为我们所有的常规控制器提供了XML。

是否有办法过滤掉“常规”控制器,或者仅选择API控制器以包含在一般文档中?

解决方法

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