2016-12-02 6 views
0

私はthese instructionsに続いて、ASP.NET Coreアプリケーションにswaggerを追加しました。ASP.NET Core Swaggerは、Webアプリケーションがサブディレクトリにホストされている場合に不正なjson URLを使用します。

ルートウェブサイトとしてホストするとうまくいきますが、既存のウェブサイトの別名としてアプリをホストすると、myserver.com/myappと言うと、swaggerは正しくないURLでswagger.jsonを探し、次のように報告します。 JSON from https://myserver.com/swagger/v1/swagger.json代わりにhttps://myserver.com/myapp/swagger/v1/swagger.jsonを使用する必要があります。

私が手にメッセージがある:

は、私は、アプリケーションベースパスを使用してswagger.jsonを探すためにswashbuckle /闊歩を設定するにはどうすればよいhttps://myserver.com/swagger/v1/swagger.json

から闊歩JSONを読み取ることができません。適切な場所にファイル?

私はIISでホストしています。

swashbuckleのバージョンは次のとおりです。

"Swashbuckle": "6.0.0-beta902" 

私はStartup.csConfigure方法でapp.UseSwaggerUi()に何かを追加する必要がありますことを疑うが、私はよく分かりません。

スタートアップ設定

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
    loggerFactory.AddDebug(); 

    if (env.IsDevelopment()) 
    { 
     app.UseDeveloperExceptionPage(); 
     app.UseBrowserLink(); 
    } 
    else 
    { 
     app.UseExceptionHandler("/Home/Error"); 
    } 

    app.UseStaticFiles(); 

    app.UseMvc(routes => 
    { 
     routes.MapRoute(
      name: "default", 
      template: "{controller=Home}/{action=Index}/{id?}"); 
    }); 

    // Enable middleware to serve generated Swagger as a JSON endpoint 
    app.UseSwagger(); 

    // Enable middleware to serve swagger-ui assets (HTML, JS, CSS etc.) 
    app.UseSwaggerUi(); 
} 
+0

私は同じ問題があります。私のローカルマシンではうまくいきましたが、展開時には同じ問題が発生します。私はいくつかの設定方法を試してきました。あなたが解決した場合は私にお知らせください! https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/128 –

答えて

0

私は明示的にエンドポイントを指定することになった:

app.UseSwagger(); 

app.UseSwaggerUi(c => 
{ 
    c.SwaggerEndpoint($"/swagger/v1/swagger.json", "MyAPI documentation"); 
    //c.SwaggerEndpoint($"/myapi/swagger/v1/swagger.json", "MyAPI documentation"); 
}); 

私はIISでWeb APIをホスティングとし、IIS Expressで浮気してきた、と私はどこに私がアプリケーションをホストしているエンドポイントを交換する必要があります。

2

環境変数ASPNETCORE_APPL_PATHを使用して、アプリケーションのベースパスを取得できます。

app.UseSwaggerUI(c => 
{ 
    string basePath = Environment.GetEnvironmentVariable("ASPNETCORE_APPL_PATH"); 
    if (basePath == null) basePath = "/"; 
    c.SwaggerEndpoint($"{basePath}swagger/v1/swagger.json", "My API"); 
}); 
関連する問題