4
votes

Swagger s'exécute localement mais pas sur IIS, ne résout pas le chemin de base

Je configure Swagger pour documenter mon API.

J'ai configuré le SwaggerEndpoint avec un chemin relatif à la spécification json, comme vous le voyez ci-dessous:

 configuration de démarrage

Lorsque je débogue localement, tout se résout correctement. Mais mon site fonctionne simplement comme http: // localhost: 44348 / index.html .

Lorsque je déploie sur IIS, qui se trouve sur un chemin virtuel, il explose:

 ne résout pas swagger.json

  1. Notez que l'URL du navigateur contient / imaging4castapi_UAT / dans le chemin
  2. Notez que la requête réelle pour le swagger.json ne contient pas cette partie de base du chemin.

Voici ce que j'ai essayé:

  1. J'ai essayé de supprimer le remplacement de RoutePrefix . Mais cela ne résout pas.
  2. J'ai essayé d'utiliser un chemin d'application tel que "~ / swagger / ..." mais il est traduit par le serveur sur des éléments d'affichage tels que les pages Razor et css et ne fonctionne pas ici dans Démarrage .

J'ai du mal à comprendre s'il s'agit d'un problème de configuration client ou de quelque chose lié à la façon dont mon site est hébergé sur IIS.

Pensées?


4 commentaires

Salut, pouvez-vous accéder à l'onglet réseau pour voir si vous pouvez trouver une erreur?


Eh bien, l'erreur est une réponse de 500 (probablement en raison du routage) car elle essaie de trouver le swagger.json à une URL qui n'existe pas. (voir # 2 sur ma deuxième image)


J'ai vu l'image, mais j'ai eu une erreur similaire mais j'ai trouvé plus d'informations sur l'onglet réseau, votre deuxième image est l'onglet de la console


Cela semble ridicule, mais mon collègue vient de supprimer la première barre oblique (/) et cela semble résoudre tous les problèmes ... Ugh!


3 Réponses :


5
votes

Essayez d'utiliser un chemin relatif:

setupAction.SwaggerEndpoint("../swagger/Imaging4CastApiSpecification/swagger.json", "4Cast API");

Veuillez noter la réponse et l'explication du problème suivant: SwashBuckle


1 commentaires

Notez que la solution réelle pour moi était simplement de supprimer la barre oblique du préfixe. Mais le lien vers la documentation est très apprécié, merci!



2
votes

Voici ma configuration Swagger pour une fois l'application PRD. J'espère que cela aide

             app.
                //Swagger
                .UseSwagger()
                .UseSwaggerUI(c =>
                {
                    c.SwaggerEndpoint($"./{_version}/swagger.json", Title);
                });

Fichier de démarrage

 public static IServiceCollection AddSwaggerConfig(this IServiceCollection services, IHostingEnvironment env,
            string title, string version)
            => services.AddSwaggerGen(c =>
            {
                //Ensure XML Document File of project is checked for both Debug and Release mode
                c.IncludeXmlComments("Your App.xml");
                //Display Enum name
                c.DescribeAllEnumsAsStrings();

                //c.OperationFilter<AddRequiredHeaderParameter>();

                    //Authentication for Bearer
                    c.AddSecurityDefinition("Bearer",
                        new ApiKeyScheme
                        {
                            In = "header",
                            Description = "Please enter JWT with Bearer into field",
                            Name = "Authorization",
                            Type = "apiKey"
                        });

                    c.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>>
                    {
                        {"Bearer", Enumerable.Empty<string>()}
                    });


                c.SwaggerDoc(version, new Info
                {
                    Title = title,
                    Version = version,
                    Description = "",
                    Contact = new Contact
                    {
                        Email = "Support@ABC.com",
                        Name = ""
                    }
                });
            });

La version est une variable d'application du fichier Config qui sera filtrée par CI / CD p >


0 commentaires

2
votes

Swagger ne prend pas en charge le répertoire virtuel par défaut. Essayez d'ajouter ceci à votre Startup.cs

    app.UseSwagger(c =>

        {   
            c.RouteTemplate = "virtual_path/{documentName}/swagger.json";
        });
     app.UseSwaggerUI(c =>

        {
            //Include virtual directory 
         c.RoutePrefix = "virtual_path";// add your virtual path here.

            c.SwaggerEndpoint("v1/swagger.json", "Api v1");
        }); 


0 commentaires