web-dev-qa-db-ja.com

.netコアアプリに見つからないswagger.jsonを修正する方法

.netコアアプリをIISサーバーにデプロイし、swagger.jsonが見つからないswagger UIで問題に直面しています。ローカル(開発環境)で実行すると、すべてが完全に機能しますが、 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 = "";
     });
 }
_

ただし、上記のコードは、仮想パスではなく実際の物理パスを返すため、機能しませんでした。

Environment.GetEnvironmentVariable("ASPNETCORE_APPL_PATH");が機能していないため、.net Core2.2で仮想パスを取得する方法を知っている人はいますか。どんなリードも役に立ちます。

2
Mahesh More

次の方法で同じことを修正できます。

パッケージ:#region Assembly Swashbuckle.AspNetCore.Swagger、Version = 4.0.1.0

フレームワーク:.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
Jayoti Parkash