リソースの実際のURLを考慮した特定のURLを登録したいと考えています。具体的には、Web APIドキュメントのSwaggerエンドポイントです。起動時にASP.NET Coreが解決URLを表示しますか?
製造で
か:私の開発環境で
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseMvc();
app.UseSwagger();
app.UseSwaggerUi(c =>
{
c.SwaggerEndpoint($"/swagger/v1/swagger.json", "API documentation");
//c.SwaggerEndpoint($"/TheGreatestWebAPI/swagger/v1/swagger.json", "API documentation");
});
}
は私が闊歩がここでそのエンドポイントに話をしたい場合にはhttp://localhost:5000上のWeb PIを、開催しますWeb APIはIISのWebアプリケーションとしてhttps://test.contoso.com/TheGreatestWebAPI
のような場所にホストされ、スワッガーはこれと話したいと思うでしょう:
https://test.contoso.com/TheGreatestWebAPI/swagger/v1/swagger.json
...後者のコメントアウトされたエンドポイントの登録。
私は何をしたいのは、このようなものを使用することです:
c.SwaggerEndpoint($"~/swagger/v1/swagger.json", "API documentation");
これは、ASP.NETのWebフォームPage.ResolveUrl()
を使用しています誰にも精通している、と私は同じ機能がすべき見ることができるものから必要がありますUrlHelper.Content()
から入手できます。ただし、この関数にはUrlHelperクラスのインスタンスが必要であり、関連するコンストラクターにはActionContextインスタンスが必要です。
UrlHelper
(UseSwaggerUI()
:Startup.Configure()
)をどのように正しくインスタンス化するかについては紛失しています。メソッドの
-S
種類の、作品:私の場合は
は、それだけでパスの最初の部分を除去するのに十分でした。先頭の "/ swagger"と "/ TheGreatestAPI/swagger"を削除すると、実際には、https:// localhost:5000/swagger/v1/swagger.json'と 'https://test.contoso .com/TheGreatestWebAPI/swagger/v1/swagger.json'と呼ばれています。しかし、 'https:// localhost:5000/swagger/index.html'の標準Swagger GUIページは、' https:// localhost:5001/swagger/index.html/v1/swagger.json'からロードしようとします。基本的に**フォルダ**ではなく相対URLでGUIファイル名**を拡張します。 –
@SigurdGarshol私は通常、 '/ swagger'に行き、'/swagger/index .html'ですが、それが時間の一部で動作しない場合、間違いなく理想的です。代わりに、サイトのルートの構成値を追加して、スワッガーを構成するときにその値を渡すこともできます。 – markt
これはちょうど私たちが今使っているもののバージョンですが、/ swaggerは自動的に/swagger/index.htmlにリダイレクトします。だから私たちのための回避策はありません。 :( –