どうやってするの?
私はこれを使いたくない:
HttpContext.Current.Server.MapPath
httpcontext を必要とせずに呼び出すことができる同様の関数はありますか?
たとえば、何かを行うスレッドを開始する場合、httpcontext は使用できませんが、アプリのパスを取得する必要があります。いいえ、コンテキストを引数として渡すことも、共有変数から読み取ることもできません。
どうやってするの?
私はこれを使いたくない:
HttpContext.Current.Server.MapPath
httpcontext を必要とせずに呼び出すことができる同様の関数はありますか?
たとえば、何かを行うスレッドを開始する場合、httpcontext は使用できませんが、アプリのパスを取得する必要があります。いいえ、コンテキストを引数として渡すことも、共有変数から読み取ることもできません。
プロパティを使用しHttpRuntime.AppDomainAppPathます。
一部の電子メール通知で提供する URL (Web アプリケーションのパーマリンク) を計算する方法を探しているときに、この質問に出くわしました。
これらは別のスレッドで生成されたため、HttpContext利用できませんでした。また、電子メールの生成に使用されるキュー テーブルに URL 関連の情報を入れないようにしたかったのです。
コード:
public static String GetCurrentAppDomainBasePath(String prefix = "http://")
{
return String.Format("{0}{1}{2}",
prefix,
System.Net.Dns.GetHostEntry("").HostName,
System.Web.HttpRuntime.AppDomainAppVirtualPath
);
}
この関数は、次のような完全な仮想パスを返しますhttp://full-host-name/AppName。もちろん、いくつかの制限があります: ハードコーディングされたプロトコル ( http、https など) とhostname代わりに使用することdomain name(1 台のマシンで複数のドメインが定義されている場合は失敗します)。