Swagger文档:Swashbuckle(隐藏方法/属性)

4

我正在使用Swagger Swashbuckle 生成文档。在我的控制器中有一些方法和我的模型中有一些属性,我不想记录它们。 是否有任何属性或属性可以从文档中留下或忽略特定的方法?

5个回答

3
除了c.IgnoreObsoleteActions(),还有c.IgnoreObsoleteProperties(),它可以隐藏文档中的属性。
当作为POST请求体的一部分接收时,JsonIgnoreAttribute会停止属性反序列化,如果您只想更改文档而不是功能,则可能不是您想要的。

我使用装饰器[Obsolete]来隐藏在Swagger中想要隐藏的属性,并在启动时添加c.IgnoreObsoleteProperties()。虽然属性在Swagger中被隐藏,但在响应中仍然可见。我使用asp.net core。如何完全隐藏在Swagger中对用户可见的属性? - Syaiful Nizam Yahya
如果你想要隐藏响应,我认为你需要在属性上使用JsonIgnoreAttribute,就像Silly John的答案中所述。 - zola25

1

对于这个方法,你有几个选项:

  1. 使用过时的属性。然后,在swagger配置中设置操作 - c.IgnoreObsoleteActions();

  2. 创建自定义属性和swagger文档过滤器。文档过滤器应该遍历每个方法,并在方法具有自定义属性时删除方法文档。

对于属性,你可以使用JsonIgnoreAttribute


第二种方法有任何示例吗? - Syaiful Nizam Yahya

0
在更新版本的Swashbuckle中(Core2/3),XmlIgnore/JsonIgnore似乎不能用于属性上。
或者你可以将属性的访问修饰符改为internal。这样应该能防止序列化和生成文档。
我不确定如何隐藏整个控制器,你可能需要在Swagger设置中添加过滤器。我有一个隐藏特定端点的例子(为了方便,在本地运行时我已经添加了路由前缀)。
        public void ConfigureServices(IServiceCollection services)
        {
            ...
            services.AddSwaggerGen(config => {
                config.SwaggerDoc("v1",
                    new OpenApiInfo {
                        Version = "v1",
                        Title = "Foo API",
                        Description = "Does foo things.",
                        Contact = new OpenApiContact {
                            Name = "nope",
                            Email = "mail@example.org",
                        },
                    });
                // Include XML comments in Swagger docs
                var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                config.IncludeXmlComments(xmlPath);
                // Filter out prefixed routes
                config.DocInclusionPredicate(
                    (name, desc) => !desc.RelativePath.ToLower().StartsWith("MyDevPrefix"));
            });
    }

0

这里有一个较新的回答:

  1. 正如其他人提到的那样 - 要忽略属性(包括文档和实际响应),请使用属性:[JsonIgnore]
  2. 要从文档中隐藏控制器/操作(控制器/操作仍然存在,只是从文档中隐藏),请使用属性:[ApiExplorerSettings(IgnoreApi = true)]

0

仅供参考,因为我也在尝试解决JsonIgnore属性不起作用的问题...

问题似乎是由于较新版本的Swashbuckle for .Net Core默认不支持NewtonSoft所导致的。

  • 从NuGet安装

    包管理器:Install-Package Swashbuckle.AspNetCore.Newtonsoft -Version 5.6.2
    CLI:dotnet add package --version 5.6.2 Swashbuckle.AspNetCore.Newtonsoft
    
  • 在startup.cs中添加代码

    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
    });
    services.AddSwaggerGenNewtonsoftSupport(); // 明确选择 - 需要放在AddSwaggerGen()之后
    

这对我有用,希望能帮助其他人。


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