首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Swashbuckle从WebAPI上的Swagger文档中省略方法

如何使用Swashbuckle从WebAPI上的Swagger文档中省略方法
EN

Stack Overflow用户
提问于 2015-04-17 14:08:25
回答 11查看 152.9K关注 0票数 242

我有一个C# ASP.NET WebAPI应用程序,它使用Swashbuckle自动生成API文档。我希望能够从文档中省略某些方法,但我似乎不知道如何告诉Swagger不要将它们包含在Swagger输出中。

我感觉到这与添加模型或模式筛选器有关,但不清楚该做什么,文档似乎只提供了如何为方法修改输出的示例,而不是从输出中完全删除它。

EN

回答 11

Stack Overflow用户

发布于 2017-01-12 22:24:22

可以将以下属性添加到控制器和操作中,以将它们从生成的文档中排除在外:[ApiExplorerSettings(IgnoreApi = true)]

票数 615
EN

Stack Overflow用户

发布于 2020-06-08 21:07:44

可能对某人有帮助,但在开发(调试)期间,我们喜欢公开整个控制器和/或操作,然后在生产过程中隐藏这些操作(发布版本)。

代码语言:javascript
复制
#if DEBUG
    [ApiExplorerSettings(IgnoreApi = false)]
#else
    [ApiExplorerSettings(IgnoreApi = true)]
#endif  
票数 32
EN

Stack Overflow用户

发布于 2017-02-14 20:08:40

有人在github上发布了解决方案,所以我要把它粘贴在这里。所有的功劳都归他。https://github.com/domaindrivendev/Swashbuckle/issues/153#issuecomment-213342771

首先创建一个属性类

代码语言:javascript
复制
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public class HideInDocsAttribute : Attribute
{
}

然后创建文档筛选器类。

代码语言:javascript
复制
public class HideInDocsFilter : IDocumentFilter
{
    public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
    {
        foreach (var apiDescription in apiExplorer.ApiDescriptions)
        {
            if (!apiDescription.ActionDescriptor.ControllerDescriptor.GetCustomAttributes<HideInDocsAttribute>().Any() && !apiDescription.ActionDescriptor.GetCustomAttributes<HideInDocsAttribute>().Any()) continue;
            var route = "/" + apiDescription.Route.RouteTemplate.TrimEnd('/');
            swaggerDoc.paths.Remove(route);
        }
    }
}

然后在Swagger类中,添加文档过滤器

代码语言:javascript
复制
public class SwaggerConfig
{
    public static void Register(HttpConfiguration config)
    {
        var thisAssembly = typeof(SwaggerConfig).Assembly;

        config
             .EnableSwagger(c =>
                {
                    ...                       
                    c.DocumentFilter<HideInDocsFilter>();
                    ...
                })
            .EnableSwaggerUi(c =>
                {
                    ...
                });
    }
}

最后一步是在Controller或方法上添加HideInDocsAttribute属性,您不希望Swashbuckle生成文档。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29701573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档