J'utilise le fichier swagger.json (généré par Swashbuckle) pour ReDoc afin d'afficher la documentation de l'API.
Ce dont j'ai besoin:
Ajoutez l'extension de fournisseur x-logo au swagger json généré à l'aide de Swashbuckle (bibliothèque Swashbuckle.AspNetCore.SwaggerGen ) afin que l'interface utilisateur ReDoc affiche le logo dans le coin supérieur gauche comme ça
Problème:
J'ai pu ajouter x-log au fichier swagger.json mais il est ajouté à la mauvaise section du fichier. Il doit être dans la section info .
C'est ce que j'ai fait pour ajouter le x-logo
{
"swagger": "2.0",
"info": {
"version": "v1",
"title":"Sample REST API",
"x-logo": {
"url": "https://rebilly.github.io/ReDoc/petstore-logo.png",
"altText": "Aimia Logo"
}
},
}
SwaggerDoc en tant que {
"swagger": "2.0",
"info": {
"version": "v1",
"title":"Sample REST API"
},
"x-logo": {
"url": "https://rebilly.github.io/ReDoc/petstore-logo.png",
"altText": "Aimia Logo"
}
}
Actuel
services.AddSwaggerGen(options =>
{
options.DocumentFilter<XLogoDocumentFilter>();
});
Attendu
public class XLogoDocumentFilter : IDocumentFilter
{
public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)
{
swaggerDoc.Extensions["x-logo"] = new { url = "https://URL/of/the/logo", altText = "Company Logo" };
}
}
Nous apprécions vraiment toute aide ou suggestion pour avoir le x-logo dans la bonne section du fichier swagger.json.
3 Réponses :
Après avoir tapé la question, j'ai moi-même trouvé la solution. Au lieu d'ajouter l'extension directement à swaggerDoc, ajoutez-la à l'objet swaggerDoc.Info.
public class XLogoDocumentFilter : IDocumentFilter
{
public void Apply(SwaggerDocument 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 {
url = "https://URL/To/The/Logo",
altText = "Logo",
});
}
}
}
pour .NET core 2.2 et supérieur
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")}
});
}
}
Les nouvelles versions de Swashbuckle prennent en charge cela dans la configuration de 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")}
}
}
}
});