.net core 如何配置Swashback以从文档中省略模板/实体/模式
我试图为Swashback构建一个过滤器,在API文档中省略项目的模型/实体/模式,保留控制器。所采用的技术是Swashback.AspNetCore v3.0.0/Swagger UI v3.17.1。我已经找到了在控制器中省略某个方法的方法,但是我想在文档中省略模型。我发现了一个与我类似的问题,包括只隐藏属性 跟随过滤器代码.net core 如何配置Swashback以从文档中省略模板/实体/模式,.net-core,swagger,swagger-ui,swashbuckle,.net Core,Swagger,Swagger Ui,Swashbuckle,我试图为Swashback构建一个过滤器,在API文档中省略项目的模型/实体/模式,保留控制器。所采用的技术是Swashback.AspNetCore v3.0.0/Swagger UI v3.17.1。我已经找到了在控制器中省略某个方法的方法,但是我想在文档中省略模型。我发现了一个与我类似的问题,包括只隐藏属性 跟随过滤器代码 public-void-Apply(OpenApiSchema、SchemaFilterContext-context) { 如果(!(context.ApiModel
public-void-Apply(OpenApiSchema、SchemaFilterContext-context)
{
如果(!(context.ApiModel是ApiObject))
{
返回;
}
var模型=作为ApiObject的上下文;
if(schema?.Properties==null | | model?.ApiProperties==null)
{
返回;
}
var excludedProperties=model.Type
.GetProperties()
.在哪里(
t=>t.GetCustomAttribute()!=null
);
var excludedSchemaProperties=model.ApiProperties
.在哪里(
ap=>excludedProperties.Any(
pi=>pi.Name==ap.MemberInfo.Name
)
);
foreach(var propertyToExclude in excludedSchemaProperties)
{
schema.Properties.Remove(propertyToExclude.ApiName);
}
}
引述:
有人建议只隐藏文档中的模型/实体/模式,而不只是它们的属性吗?如下图所示
在您的Swashback/Swagger UI配置中将
DefaultModelsExpandDepth
设置为-1:
app.UseSwaggerUI(c=>
{
...
c、 DefaultModelsExpandDepth(-1);
}
至少对我来说,我必须做以下事情:
internal class SwaggerSchemaFilter : ISchemaFilter
{
public void Apply(OpenApiSchema schema, SchemaFilterContext context)
{
var keys = new System.Collections.Generic.List<string>();
var prefix = "My.Prefix";
foreach(var key in context.SchemaRepository.Schemas.Keys)
{
if (key.StartsWith(prefix))
{
keys.Add(key);
}
}
foreach(var key in keys)
{
context.SchemaRepository.Schemas.Remove(key);
}
}
}
内部类SwaggerSchemaFilter:ISchemaFilter
{
public void Apply(OpenApiSchema模式、SchemaFilterContext上下文)
{
var keys=new System.Collections.Generic.List();
var prefix=“My.prefix”;
foreach(context.SchemaRepository.Schemas.Keys中的var键)
{
if(带(前缀)的起始键)
{
key.Add(key);
}
}
foreach(var键入键)
{
context.SchemaRepository.Schemas.Remove(键);
}
}
}
Related:感谢您的建议!但是当使用代码行时,它没有达到从文档中省略模式/实体/模型的预期目标。请确保您使用了DefaultModel*s*。
(带“s”)而不是DefaultModel…
DefaultModelExpandDepth、DefaultModelRendering
、DefaultModelsExpandDepth
?它们的名称看起来非常相似,功能相似吗?@liang请参阅Swagger UI文档了解每个配置选项的描述