.net core 如何配置Swashback以从文档中省略模板/实体/模式

.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

我试图为Swashback构建一个过滤器,在API文档中省略项目的模型/实体/模式,保留控制器。所采用的技术是Swashback.AspNetCore v3.0.0/Swagger UI v3.17.1。我已经找到了在控制器中省略某个方法的方法,但是我想在文档中省略模型。我发现了一个与我类似的问题,包括只隐藏属性

跟随过滤器代码

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文档了解每个配置选项的描述