2012-02-01 18 views
40

チルダ記号( '〜')で始まる典型的なasp.net URLを取得しようとしています。「http:」で始まる完全なURLを解析します。チルダ(〜)記号でURLからフルURLを取得

私は、この文字列「〜/ PageB.aspx」

を持っていると私はそれがなるようにしたい「http://myServer.com/PageB.aspx」私は、サーバーやアプリケーションなどの異なるパスをURLを解析して取得するためのいくつかの方法が存在しているはず

。私はいくつかを試したが、私が望む結果を得ていない。

答えて

16

をあなたは常にサーバーの特定のパスへの相対パスに変換するためにResolveUrlメソッドを使用することができますページハンドラにいる場合。しかし、 "http : //www.yourserver.se"の部分も同様にしたい場合は、Request.Url.SchemeRequest.Url.Authorityをその前に付ける必要があります。

66

たちは、サーバ側とクライアント側でそれを利用可能にする上のリソースへの相対パスを解決するために使用できるASP.NETで利用できる様々な方法があります

System.Web.VirtualPathUtility.ToAbsolute("yourRelativePath"); 

試してみてください。私は4つの方法を知っている -

1) Request.ApplicationPath 
2) System.Web.VirtualPathUtility 
3) Page.ResolveUrl 
4) Page.ResolveClientUrl 

良い記事:Different approaches for resolving URLs in ASP.NET

+0

注そのHTTP:現在の要求が使用されているものとして何文字列操作は、入力として、両方の相対的または絶対的なURLを許容することができない、それは正確に同じ方式で、権限、ポート、及びルートパスを使用します/ /refactoringaspnet.blogspot.com/2009/09/different-approaches-for-resolving-urls.html記事_claims_「URLにクエリ文字列パラメータがあるとVirtualPathUtilityはエラーをスローしますが、正しく動作することがわかりますクエリ文字列を使用します。 – JonBrave

8
string.Format("http://{0}{1}", Request.Url.Host, Page.ResolveUrl(relativeUrl)); 
+0

追加情報:ポート番号が必要な場合は、それを使用してください。 string.Format( "http:// {0} {1}"、Request.Url.Authority、Page.ResolveUrl(relativeUrl)) – user3035005

+0

これは役に立ちましたが、私はRazorで "Href Page.ResolveUrl()はnull参照例外をスローするためです。 – neoscribe

4

この方法は私に一番いい方法です。

private Uri GetAbsoluteUri(string redirectUrl) 
{ 
    var redirectUri = new Uri(redirectUrl, UriKind.RelativeOrAbsolute); 

    if (!redirectUri.IsAbsoluteUri) 
    { 
     redirectUri = new Uri(new Uri(Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath), redirectUri); 
    } 

    return redirectUri; 
} 
+0

上記の情報をこの情報と混在させると、 'System.Web.VirtualPathUtility.ToAbsolute( "yourRelativePath"); '〜/'のパスを解決するために、このメソッドを文字列の結果に使用します。できます。 (ポート情報が必要ではないと仮定して)これらの組み合わせが私のために働いた。 – DiamondDrake