Swagger 使用Swashback Asp.Net Core为ReDoc添加x徽标供应商扩展

Swagger 使用Swashback Asp.Net Core为ReDoc添加x徽标供应商扩展,swagger,asp.net-core-webapi,swashbuckle,Swagger,Asp.net Core Webapi,Swashbuckle,我正在为ReDoc使用swagger.json文件(由Swashback生成)来显示API文档 我需要什么: 将x-logo供应商扩展添加到使用Swashback(Swashback.AspNetCore.SwaggerGen库)生成的swagger json,以便ReDoc UI在左上角显示徽标 问题: 我能够将x-log添加到swagger.json文件中,但它添加到了文件的错误部分。它需要在info部分中 这就是我为添加x-logo 创建了一个文档过滤器,如下所示 公共类xlogoc

我正在为ReDoc使用swagger.json文件(由Swashback生成)来显示API文档

我需要什么:
x-logo
供应商扩展添加到使用Swashback(
Swashback.AspNetCore.SwaggerGen
库)生成的swagger json,以便ReDoc UI在左上角显示徽标

问题: 我能够将
x-log
添加到swagger.json文件中,但它添加到了文件的错误部分。它需要在
info
部分中

这就是我为添加
x-logo

  • 创建了一个文档过滤器,如下所示
公共类xlogocumentfilter:IDocumentFilter
{
公共无效应用(SwaggerDocument swaggerDoc、DocumentFilterContext上下文)
{
swaggerDoc.Extensions[“x-logo”]=new{url=”https://URL/of/the/logo,altText=“公司徽标”};
}
}
  • 将筛选器添加到
    SwaggerDoc
    as
services.AddSwaggerGen(选项=>
{   
options.DocumentFilter();
});
实际的

期望


非常感谢任何帮助或建议,将
x-logo
放在swagger.json文件的正确部分。

键入问题后,我自己找到了解决方案。将扩展添加到swaggerDoc.Info对象,而不是直接添加到swaggerDoc

公共类xlogocumentfilter:IDocumentFilter
{
公共无效应用(SwaggerDocument swaggerDoc、DocumentFilterContext上下文)
{   
//需要检查扩展是否已经存在,否则会招摇过市
//试图重新添加它,结果出错
如果(!swaggerDoc.Info.Extensions.ContainsKey(“x-logo”))
{
swaggerDoc.Info.Extensions.Add(“x-logo”),新增{
url=”https://URL/To/The/Logo",
altText=“Logo”,
});
}           
}
}

适用于.NET core 2.2及更高版本

public class XLogoDocumentFilter : IDocumentFilter
{
    public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
    {
        // need to check if extension already exists, otherwise swagger 
        // tries to re-add it and results in error  
        if (!swaggerDoc.Info.Extensions.ContainsKey("x-logo"))
            swaggerDoc.Info.Extensions.Add("x-logo", new OpenApiObject
            {
                {"url", new OpenApiString("https://www.petstore.com/assets/images/logo.png")},
                {"backgroundColor", new OpenApiString("#FFFFFF")},
                {"altText", new OpenApiString("PetStore Logo")}
            });
    }

}

较新版本的Swashback在SwaggerDoc设置中支持此功能:

c.SwaggerDoc("v1", new OpenApiInfo
{
  Title = ApiDescription,
  Version = "v1",
  Extensions = new Dictionary<string, IOpenApiExtension>
    {
      {"x-logo", new OpenApiObject
        {
           {"url", new OpenApiString("https://blah.com/logo")},
           { "altText", new OpenApiString("The Logo")}
        } 
      }
    }
});
c.SwaggerDoc(“v1”,新OpenApiInfo)
{
标题=描述,
Version=“v1”,
扩展=新字典
{
{“x-logo”,新的OpenApiObject
{
{“url”,新的OpenApiString(“https://blah.com/logo")},
{“altText”,新的OpenApiString(“徽标”)}
} 
}
}
});
public class XLogoDocumentFilter : IDocumentFilter
{
    public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
    {
        // need to check if extension already exists, otherwise swagger 
        // tries to re-add it and results in error  
        if (!swaggerDoc.Info.Extensions.ContainsKey("x-logo"))
            swaggerDoc.Info.Extensions.Add("x-logo", new OpenApiObject
            {
                {"url", new OpenApiString("https://www.petstore.com/assets/images/logo.png")},
                {"backgroundColor", new OpenApiString("#FFFFFF")},
                {"altText", new OpenApiString("PetStore Logo")}
            });
    }

}
c.SwaggerDoc("v1", new OpenApiInfo
{
  Title = ApiDescription,
  Version = "v1",
  Extensions = new Dictionary<string, IOpenApiExtension>
    {
      {"x-logo", new OpenApiObject
        {
           {"url", new OpenApiString("https://blah.com/logo")},
           { "altText", new OpenApiString("The Logo")}
        } 
      }
    }
});