当前位置: 首页 > 知识库问答 >
问题:

如何配置Swashbuckle以从文档中省略模板/实体/模式

张承颜
2023-03-14

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

遵循筛选器代码

public void Apply(OpenApiSchema schema, SchemaFilterContext context)
{
    if (!(context.ApiModel is ApiObject))
    {
        return;
    }

    var model = context as ApiObject;

    if (schema?.Properties == null || model?.ApiProperties == null)
    {
        return;
    }

    var excludedProperties = model.Type
        .GetProperties()
        .Where(
            t => t.GetCustomAttribute<SwaggerExcludeAttribute>() != null
        );

    var excludedSchemaProperties = model.ApiProperties
        .Where(
            ap => excludedProperties.Any(
                pi => pi.Name == ap.MemberInfo.Name
            )
        );

    foreach (var propertyToExclude in excludedSchemaProperties)
    {
         schema.Properties.Remove(propertyToExclude.ApiName);
    }
}

quote:如何配置Swashbuckle以忽略模型上的属性

有没有人建议只隐藏文档中的模型/实体/模式,而不仅仅是它们的属性?如下图所示。

共有2个答案

吕森
2023-03-14

至少对我来说,我必须做这样的事情:

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);
        }
    }
}
苏鸿波
2023-03-14

在您的招摇过市/招摇过市UI配置中,将DefaultModelsExpandDepth设置为-1:

app.UseSwaggerUI(c =>
{
    ...
    c.DefaultModelsExpandDepth(-1);
}
 类似资料:
  • 这里包括 Nunjuck 所有可用的功能。 Nunjucks 是 jinja2 的 javascript 的实现,所以如果此文档有什么缺失,你可以直接查看 jinja2 的文档,不过两者之间还存在一些差异。 文件扩展名 虽然你可以用任意扩展名来命名你的Nunjucks模版或文件,但Nunjucks社区还是推荐使用.njk。 如果你在给Nunjucks开发工具或是编辑器上的语法插件时,请记得使用.n

  • 模板文件一定要小写下划线,如 list_pubu.html 你可以给你每一个模板文件增加一个json配置文件,用于描述这个模板文件;配置文件和模板文件名是同名的,只是后缀为 json,如simpleboot3/portal/index.html模板文件的配置文件就是simpleboot3/portal/index.json; 一个简单的配置文件内容如下: { "name": "门户应用首页

  • 模板文件一定要小写下划线,如 list_pubu.html 你可以给你每一个模板文件增加一个json配置文件,用于描述这个模板文件;配置文件和模板文件名是同名的,只是后缀为 json,如simpleboot3/portal/index.html模板文件的配置文件就是simpleboot3/portal/index.json; 一个简单的配置文件内容如下: { "name": "门户应用首页

  • 了解如何在 Dreamweaver“设计”视图和“代码”视图中识别模板和基于模板的文档。 在“设计”视图中识别模板 在“设计”视图中,可编辑区域出现在“文档”窗口的矩形外框中。查看“文档”窗口中的底部窗格可看到区域的名称。 通过查看“文档”窗口中的标题栏,可以识别模板文件。文件的文件扩展名为 .dwt。在“设计”视图中识别模板 在“代码”视图中识别模板 在“代码”视图中,使用以下注释标记 HTML

  • Smarty 是一个 php 模板引擎。更准确的说,它分开了逻辑程序和外在的内容,提供了一种易于管理的方法。 Github 地址:https://github.com/smarty-php/smarty 官网:https://www.smarty.net/

  • Jade 是一个高性能的模板引擎,它深受 Haml 影响,它是用 javascript 实现的,并且可以供 node 使用。