2012-02-01 79 views

回答

16

如果你在一個頁面處理器是你總是可以使用ResolveUrl方法的相對路徑轉換爲服務器的特定路徑。但是,如果您想要「http : //www.yourserver.se」部分,則必須在其中添加Request.Url.SchemeRequest.Url.Authority

66

試用

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

有跡象表明,在ASP.NET中,我們可以使用相對路徑解析到服務器端資源,並使其可在客戶端提供的各種方式。我知道的4種方式 -

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

好文章:Different approaches for resolving URLs in ASP.NET

+0

注意,HTTP:/ /refactoringaspnet.blogspot.com/2009/09/different-approaches-for-resolving-urls.html文章_claims_「如果URL中有查詢字符串參數,VirtualPathUtility將引發錯誤」,但我發現它甚至可以正確運行與查詢字符串。 – JonBrave 2017-08-23 12:01:23

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 2013-12-18 17:31:10

+0

這很有用,但是,我在Razor中使用了「Href()」,而不是Page.ResolveUrl()因爲它拋出一個空引用異常。 – neoscribe 2014-12-01 22:00:57

4

這種方法對我來說看起來最好。沒有字符串操作,它可以容忍兩個相對的或絕對的URL作爲輸入,並且它使用完全相同的方案,授權,端口和根路徑作爲當前請求是使用:

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 2016-03-09 20:07:54