2016-10-05 17 views
9

リクエストをしないでAspNetコアアプリケーションのベースURLを取得するにはどうすればよいですか?リクエストにアクセスせずにベースURLを取得する方法

私はあなたがスキームとホスト(すなわち$"{Request.Scheme}//{Request.Host}"https://localhost:5000のようなものを与えるでしょう)を得ることができますが、どこからでもこの情報を得ることができますか?

つまり、絶対URLを作成する必要があるサービスクラスがある場合、httpリクエストが利用できない場合、現在のURLを取得するにはどうすればよいですか?

UPDATE:ホスティングURLは、アプリケーションに対して完全に外部にあり、それが唯一のリクエストホストからそれを抽出するために理にかなっている理由ですので、たぶんそのシナリオも意味がありません。..

+1

とAspNetCoreにして注入することができるサービスがあることだけで簡単なメモを思い付きます現在のリクエストからベースURLを取得するすべてのクラス(リクエストに直接アクセスできるコントローラにない場合) 'IHttpContextAccessor contextAccessor'を注入し、次に ' var url = $ "{contextAccessor.HttpContext.Request.Scheme}を構築するだけです:// {contextAccessor.HttpContext.Request.Host.ToUriComponent()}"; ' しかし、 https://github.com/aspnet/Hosting/issues/793で明示的にDIに登録する必要があるようです: 'services.AddSingleton (); ' – iberodev

答えて

5

あなたはURLをホストし、正しいです外部情報であり、アプリケーションに設定パラメータとして渡すことができます。

IWebHostBuilderインターフェイスを使用して、リクエストなしで、設定されたリスニングアドレス(http://+:5000など)を取得できます。それはGetSettingメソッドを介してホスト設定へのアクセスを提供します。

/// <summary> 
/// Get the setting value from the configuration. 
/// </summary> 
/// <param name="key">The key of the setting to look up.</param> 
/// <returns>The value the setting currently contains.</returns> 
string GetSetting(string key); 

アドレスを聞いて設定することができますWebHostDefaults.ServerUrlsKey設定名は、あります。

public static IWebHostBuilder UseUrls(this IWebHostBuilder hostBuilder, params string[] urls); 

the documentationで説明したように(デフォルトのリスニングがlocalhost:5000に設定されていることで、あなたが知っている)urls設定パラメータを定義します。.UseUrls拡張メソッドを追加するときに我々はそれを上書きします。

IWebHostBuilderのインスタンスを持つので、.GetSetting(WebHostDefaults.ServerUrlsKey)を呼び出して現在の値を取得できます。

5

私はStart.cs設定のベースURLを取得するための、いくつかの理由のために必要なので、私はこの

var URLS = app.ServerFeatures.Get<IServerAddressesFeature>().Addresses;

+1

これは、 VS。 IIS ExpressとIISの両方で、ランダムなポート番号を返します。 – Whoever

関連する問題