.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で仮想パスを取得する方法を知っている人はいますか。どんなリードも役に立ちます。
次の方法で同じことを修正できます。
パッケージ:#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でホストする場合に機能します。