Как исправить swagger.json, который не найден в основном приложении .net - PullRequest
0 голосов
/ 28 января 2019

Я развертываю свое основное приложение .net на сервере IIS и сталкиваюсь с проблемой в пользовательском интерфейсе swagger, где swagger.json не найден.Когда я запускаю его локально (среда разработки), все работает отлично, но при развертывании его на сервере IIS не удается найти файл swagger.json.

Ранее я сталкивался с этой проблемой в приложении .net core 2.1, и яразрешил его, написав приведенный ниже код, чтобы получить виртуальный базовый путь.

string basePath = Environment.GetEnvironmentVariable("ASPNETCORE_APPL_PATH");
            basePath = basePath == null ? "/" : (basePath.EndsWith("/") ? basePath : $"{basePath}/");

 app.UseSwaggerUI(c =>
     {
      c.SwaggerEndpoint($"{basePath}swagger/v1/swagger.json", "Test.Web.Api");
      c.RoutePrefix = "";
     });

Я попытался использовать приведенный ниже код, чтобы разрешить его:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 {
   app.UseSwaggerUI(c =>
     {
      c.SwaggerEndpoint($"{env.ContentRootPath}swagger/v1/swagger.json", "Test.Web.Api");
       //OR
      c.SwaggerEndpoint($"{env.WebRootPath}swagger/v1/swagger.json", "Test.Web.Api");
      c.RoutePrefix = "";
     });
 }

Но предыдущий код не сработал, когда он возвращаетсяфактический физический путь, а не виртуальный путь.

Кто-нибудь знает, как получить виртуальный путь в .net core 2.2, так как Environment.GetEnvironmentVariable("ASPNETCORE_APPL_PATH"); не работает.Любое руководство будет полезно.

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Исправить это можно следующим образом:

Пакет: #region Assembly Swashbuckle.AspNetCore.Swagger, версия = 4.0.1.0

Framework: .Net Core 2.2

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // Enable middleware to serve generated Swagger as a JSON endpoint.
    app.UseSwagger();
    // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.), 
    // specifying the Swagger JSON endpoint.
    app.UseSwaggerUI(c =>
    {
         c.SwaggerEndpoint("/swagger/v1/swagger.json", "Versioned Api v1");
    );
}

Это работа, когда вы запускаете приложение локально или в IIS.

0 голосов
/ 28 января 2019

Я исправил свою проблему, поместив приведенный ниже код в мое основное приложение .net.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 {
   app.UseSwaggerUI(c =>
     {
      c.SwaggerEndpoint("./swagger/v1/swagger.json", "Test.Web.Api");
      c.RoutePrefix = string.Empty;
    });
 }

Согласно документации swashbuckle вам необходимо добавить ./, если вы ее размещаетев IIS.

Надеюсь, этот ответ сэкономит ваше время!

...