【发布时间】:2016-11-16 13:13:38
【问题描述】:
我正在使用 Swagger Swashbuckle 生成文档。我的控制器中有一些方法和模型中有一些我不想记录的属性。 是否有任何 arrtibute 或属性可以离开或忽略文档中的特定方法?
【问题讨论】:
标签: swagger swashbuckle
我正在使用 Swagger Swashbuckle 生成文档。我的控制器中有一些方法和模型中有一些我不想记录的属性。 是否有任何 arrtibute 或属性可以离开或忽略文档中的特定方法?
【问题讨论】:
标签: swagger swashbuckle
对于该方法,您有几个选择:
使用过时属性。然后,您必须在 swagger 配置中设置操作 - c.IgnoreObsoleteActions();
创建自定义属性和 swagger 文档过滤器。如果方法具有自定义属性,则文档过滤器应遍历每个方法并删除方法文档
对于属性,您可以使用JsonIgnoreAttribute
【讨论】:
除了c.IgnoreObsoleteActions(),还有c.IgnoreObsoleteProperties(),它在文档中隐藏了属性。
JsonIgnoreAttribute 将在作为 POST 请求正文的一部分接收时停止属性反序列化,如果您只想更改文档而不是功能,这可能不是您想要的。
【讨论】:
在最新版本的 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"));
});
}
【讨论】:
请注意,因为我还试图找出 JsonIgnore 的属性不起作用...
问题似乎在于 .Net Core 的新版本 Swashbuckle 不支持开箱即用的 NewtonSoft。
从 NuGet 安装
Package Manager : 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(); // explicit opt-in - needs to be placed after AddSwaggerGen()
这对我有用,希望这对其他人有帮助。
【讨论】:
这里有一个更新的答案:
[JsonIgnore]
[ApiExplorerSettings(IgnoreApi = true)]
【讨论】: