Swagger 5.0 - IDocumentFilter(SwaggerDocument 到 OpenApiDocument)自定义 "Definitions"
Swagger 5.0 - IDocumentFilter (SwaggerDocument to OpenApiDocument) custom "Definitions"
我们正在将应用程序从 .NET Core 2.1 迁移到 3.1,为此我们需要将 swagger 从 4.X 升级到 5.X 作为出色地。使用 swagger 4.x 我们能够删除某些标记有特定属性的属性,如下所示:
public class SwaggerIgnoreFilter : IDocumentFilter
{
public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)
{
var allTypes = AppDomain.CurrentDomain.GetAssemblies().SelectMany(i => i.GetTypes()).ToList();
foreach (var definition in swaggerDoc?.Definitions)
{
var type = allTypes.FirstOrDefault(x => x.Name == definition.Key);
if (type != null)
{
var properties = type.GetProperties();
foreach (var prop in properties.ToList())
{
var ignoreAttribute = prop.GetCustomAttribute(typeof(SwaggerIgnoreAttribute), false);
if (ignoreAttribute != null)
{
definition.Value.Properties.Remove(prop.Name);
}
}
}
}
}
}
问题是在 swagger 5.0 中,IDocumentFilter 发生了变化,我们用 OpenApiDocument 代替了 SwaggerDocument,SwaggerDocument 去掉了 Definitions 属性,我们无法弄清楚如何从 swagger 页面中隐藏某些属性。任何 help/suggestion/link 都会很棒。谢谢
现在您可以使用swaggerDoc.Components.Schemas
public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
{
var allTypes = AppDomain.CurrentDomain.GetAssemblies().SelectMany(i => i.GetTypes()).ToList();
foreach (var definition in swaggerDoc.Components.Schemas)
{
var type = allTypes.FirstOrDefault(x => x.Name == definition.Key);
if (type != null)
{
var properties = type.GetProperties();
foreach (var prop in properties.ToList())
{
var ignoreAttribute = prop.GetCustomAttribute(typeof(SwaggerIgnoreAttribute), false);
if (ignoreAttribute != null)
{
definition.Value.Properties.Remove(prop.Name);
}
}
}
}
}
我们正在将应用程序从 .NET Core 2.1 迁移到 3.1,为此我们需要将 swagger 从 4.X 升级到 5.X 作为出色地。使用 swagger 4.x 我们能够删除某些标记有特定属性的属性,如下所示:
public class SwaggerIgnoreFilter : IDocumentFilter
{
public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)
{
var allTypes = AppDomain.CurrentDomain.GetAssemblies().SelectMany(i => i.GetTypes()).ToList();
foreach (var definition in swaggerDoc?.Definitions)
{
var type = allTypes.FirstOrDefault(x => x.Name == definition.Key);
if (type != null)
{
var properties = type.GetProperties();
foreach (var prop in properties.ToList())
{
var ignoreAttribute = prop.GetCustomAttribute(typeof(SwaggerIgnoreAttribute), false);
if (ignoreAttribute != null)
{
definition.Value.Properties.Remove(prop.Name);
}
}
}
}
}
}
问题是在 swagger 5.0 中,IDocumentFilter 发生了变化,我们用 OpenApiDocument 代替了 SwaggerDocument,SwaggerDocument 去掉了 Definitions 属性,我们无法弄清楚如何从 swagger 页面中隐藏某些属性。任何 help/suggestion/link 都会很棒。谢谢
现在您可以使用swaggerDoc.Components.Schemas
public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
{
var allTypes = AppDomain.CurrentDomain.GetAssemblies().SelectMany(i => i.GetTypes()).ToList();
foreach (var definition in swaggerDoc.Components.Schemas)
{
var type = allTypes.FirstOrDefault(x => x.Name == definition.Key);
if (type != null)
{
var properties = type.GetProperties();
foreach (var prop in properties.ToList())
{
var ignoreAttribute = prop.GetCustomAttribute(typeof(SwaggerIgnoreAttribute), false);
if (ignoreAttribute != null)
{
definition.Value.Properties.Remove(prop.Name);
}
}
}
}
}