2012-03-14 39 views
21

如何從Request.Url.AbsolutePath獲取應用相對網址?從Request.Url.AbsolutePath獲取應用相關網址

VirtualPathUtility似乎只適用於~/XXX的網址?

+0

嗨,看看這裏:http://stackoverflow.com/questions/3681052/get-absolute-url-from-relative-path-refactored-method – 2012-03-14 11:52:07

+0

@felipeoriani:這是絕對的相對路徑(相對於什麼我想要)。 – jgauffin 2012-03-14 11:55:19

+0

Request.ApplicationPath是你想要的嗎? – V4Vendetta 2012-03-14 12:00:01

回答

15

我解決了它這樣的:

// create an absolute path for the application root 
var appUrl = VirtualPathUtility.ToAbsolute("~/"); 

// remove the app path (exclude the last slash) 
var relativeUrl = HttpContext.Current.Request.Url.AbsolutePath.Remove(0, appUrl.Length - 1); 
+1

改進了編譯錯誤。對不起忘了告訴你。 – Pankaj 2012-03-16 08:29:47

+0

如果HttpContext.Current.Request.Url.AbsolutePath有一個%20的空間我應該怎麼做? – Marwan 2013-10-22 09:40:12

+0

用空格替換它。或者使用'Uri.DecodeXXx()'(不記得方法名稱) – jgauffin 2013-10-22 09:59:54

1
String appUrl = VirtualPathUtility.ToAbsolute("~/"); 
String RelativePath = new System.Uri(Page.Request.Url, "").PathAndQuery.Substring(appUrl.Length-1) 
+0

Hwow是否會生成一個應用程序相對url? – jgauffin 2012-03-14 14:28:16

+0

假設我有一個URL http:// localhost:49484/Website/Default.aspx'這會給你/Default.aspx – Pankaj 2012-03-14 14:31:50

+0

你和我在答案中做的一樣,但稍微複雜一點? – jgauffin 2012-03-14 14:53:48

20

它晚了一點回答,但有一個優雅的解決方案這一點。您可以使用

Request.Url.PathAndQuery 

這將返回頁面的相對路徑。

例如,如果該URL爲www.example.com/products?A=a&B=b&C=c,上面這段代碼將返回/products?A=a&B=b&C=c

+7

這不是相對url。這是根源的絕對路徑。不適用於虛擬目錄。 – jgauffin 2012-07-31 06:49:07

+3

但是這正是許多人在這裏結束時所需要的:) – Stefanvds 2015-11-13 07:38:33

+0

這不包括任何錨 - 我想要的。 – 2018-03-06 11:19:54

3

我覺得這是最徹底的方法:

new Uri(Request.Url.PathAndQuery, UriKind.Relative)) 
4

這爲我工作:

VirtualPathUtility.MakeRelative("~", Request.Url.AbsolutePath) 

例如,如果網站的根是/WebsiteRequest.Url.AbsolutePath/Website/some/path這將返回some/path

6

要做到這一點,而不使用字符串操作和處理我使用的應用程序的相對路徑:

var relativeUrl = VirtualPathUtility.ToAppRelative(
     new Uri(context.Request.Url.PathAndQuery, UriKind.Relative).ToString()); 
+0

爲什麼'new Uri(con​​text.Request.Url.PathAndQuery,UriKind.Relative).ToString()'?不僅僅是'context.Request.Url.PathAndQuery'是一回事嗎? – MiMo 2016-12-15 21:27:03

0

要建立在阿什溫·辛格的很好的答案 - 我需要包括與我的相對URL的錨鏈接,所以我在剛剛結束重新添加它:

Request.Url.PathAndQuery + Request.Url.Fragment 

所以http://localhost:8080/abc/d?foo=bar#jazz變得/abc/d?foo=bar#jazz