2
votes

Ajout d'une extension de fournisseur x-logo à l'aide de Swashbuckle Asp.Net Core pour ReDoc

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 entrez la description de l'image ici

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

  • Création d'un filtre de document comme ci-dessous
    {
      "swagger": "2.0",
      "info": {
        "version": "v1",
        "title":"Sample REST API",
        "x-logo": {
          "url": "https://rebilly.github.io/ReDoc/petstore-logo.png",
          "altText": "Aimia Logo"
        }
      },

    }
  • Ajout du filtre à 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.


0 commentaires

3 Réponses :


5
votes

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",
                });
              }           

            }

        }


0 commentaires

2
votes

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")}
            });
    }

}


0 commentaires

4
votes

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")}
        } 
      }
    }
});


0 commentaires