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:
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:
/ imaging4castapi_UAT /
dans le chemin Voici ce que j'ai essayé:
RoutePrefix
. Mais cela ne résout pas. "~ / 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?
3 Réponses :
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
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!
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 >
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"); });
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!