【发布时间】:2021-01-07 06:16:07
【问题描述】:
我需要向模型添加一个属性,并且我已经实现了selected answer here 中的建议,它的工作原理是它删除了我用模型的SwaggerIgnorePropertyAttribute 属性标记的属性。
我的问题是,如果我的应用程序有多个 API 版本,如何从某些版本的 swagger doc/schema 中删除它?我只关心不要大摇大摆地看到添加的属性。尽管我有多个版本的应用程序,但我在整个应用程序中实际上只有 1 个版本的模型。
我添加了这样的版本:
services.AddSwaggerGen(
swaggerOptions =>
{
swaggerOptions.SwaggerDoc(
"v1",
new Info
{
Title = "Titlebla1",
Description = "bla1",
Version = "v1"
});
swaggerOptions.SwaggerDoc(
"v2",
new Info
{
Title = "Titlebla2",
Description = "bla2",
Version = "v2"
});
etc
我知道我可以通过使用 SwaggerDocument 并执行以下操作来找到版本:swaggerDoc.Info.Version 但是如何从下面的 SwaggerExcludePropertySchemaFilter 类中的 Apply 访问 SwaggerDocument?
private class SwaggerExcludePropertySchemaFilter : ISchemaFilter
{
public void Apply(Schema schema, SchemaFilterContext context)
{
if (schema?.Properties == null)
{
return;
}
var excludedProperties = context.SystemType.GetProperties().Where(t => t.GetCustomAttribute<SwaggerIgnorePropertyAttribute>() != null);
foreach (var excludedProperty in excludedProperties)
{
var propertyToRemove = schema.Properties.Keys.SingleOrDefault(x => string.Equals(x, excludedProperty.Name, StringComparison.OrdinalIgnoreCase));
if (propertyToRemove != null)
{
schema.Properties.Remove(propertyToRemove);
}
}
}
}
【问题讨论】:
标签: asp.net-core swagger swashbuckle swashbuckle.aspnetcore