ASP.NETでウェブサイトの絶対パスを得るいくつかの方法


ASPを作成する.NETアプリケーションの場合、テンプレートページやユーザコントロールにjsやcssファイルのパスを設定するなど、静的ファイルのパスをよりよく制御するために絶対パスを採用することは避けられない場合があります.次は絶対パスを取得するいくつかの方法です.
 
VirtualPathUtility.ToAbsolute("~/")
HttpRuntime.AppDomainAppVirtualPath
Request.ApplicationPath
Page.ResolveUrl("~")

 
上記のコードの結果は、Webサイトにアクセスした場合、次のようになります.
VirtualPathUtility.ToAbsolute("~/")
=/
HttpRuntime.AppDomainAppVirtualPath
=/
Request.ApplicationPath
=/
Page.ResolveUrl("~")
=/
仮想ディレクトリ(http://localhost:806/web2/url.aspx)にアクセスした結果、次のようになりました.
VirtualPathUtility.ToAbsolute("~/")
=/web2/
HttpRuntime.AppDomainAppVirtualPath
=/web2
Request.ApplicationPath
=/web2
Page.ResolveUrl("~")
=/web2/
2つ目と3つ目の方法では、Webサイトへのアクセスは/で終わり、仮想ディレクトリへのアクセスは/ではなく、判断を下すには1回の判断が必要なので、少し面倒です.ただし、これらの方法はページで使用するのは問題ありませんが、GlobalのApplication_Startイベントでサイトの絶対パスを得る必要がある場合は、前の2つの方法を使用する必要があります.3つ目の方法を使用すると、Request is not available in this contextというエラーが報告されます.したがって、最初の2つの方法しか使用できません.たとえば
 
void Application_Start(object sender, EventArgs e)
{
    System.IO.StreamWriter s = new System.IO.StreamWriter(HttpRuntime.AppDomainAppPath + "log.txt");
    s.WriteLine(VirtualPathUtility.ToAbsolute("~/"));
    s.WriteLine(HttpRuntime.AppDomainAppVirtualPath);
    s.Close();
}