生成Swagger/Swashbuckle文档仅适用于MVC Core应用程序中的API控制器

3
我们有一个ASP.NET MVC Core应用程序,其中包含常规MVC控制器。此外,我们有一个名为“API”的子文件夹,位于Controllers文件夹中,包含少量API控制器。
我们正在使用“AddSwaggerGen”中的“.IncludeXmlComments”方法来获取项目中的XML文档。但是,它也会获取我们所有常规控制器的XML。
是否有一种方法可以过滤掉“常规”控制器,或者仅选择API控制器以包含在swagger文档中?
1个回答

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

完美运作,谢谢。在我的情况下,我想要的解决方案是:return methodInfo.DeclaringType.GetCustomAttributes<Microsoft.AspNetCore.Mvc.ApiControllerAttribute>(true).Any();因此,如果控制器使用了ApiControllerAttribute进行装饰,则包含在Swagger文档中,否则忽略。非常好用。 - SimonGoldstone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接