Swagger 使用Swashback Asp.Net Core为ReDoc添加x徽标供应商扩展
我正在为ReDoc使用swagger.json文件(由Swashback生成)来显示API文档 我需要什么: 将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
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=“公司徽标”};
}
}
- 将筛选器添加到
asSwaggerDoc
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")}
}
}
}
});