2010-07-12 25 views
2

我在與相對URI與相對URI工作

我有一個聽音兩方面對給定前綴的簡單HttpListener應用程序有點麻煩(目前是http://+:80/Temporary_Listen_Addresses/,但它可能是任何其他有效的前綴) 。

對於任何給定的請求,我試圖找出請求的URI是相對於該前綴的,所以例如,如果有人請求http://localhost/Temporary_Listen_Addresses/test.html,我想獲得test.html

這樣做的最好方法是什麼?

更新: MakeRelativeUri方法不適用於我,因爲它不知道等效地址。例如,後續的使用時,「localhost」的工作得很好:

Uri baseUri = new Uri("http://localhost/Temporary_Listen_Addresses/"); 
Uri relative = baseUri.MakeRelativeUri(uri); 

但是,如果你瀏覽到http://127.0.0.1/,或http://machinename/等不工作...

回答

2

您可以使用MakeRelative方法上URI類。

編輯:如果機器名稱或URL的權威部分是一個問題,你可以做什麼是每次創建一個具有相同權限的新URL,並且只使用現有URI的路徑。例如,你可以通過做一些像創建輸入URI:

UriBuilder b = new UriBuilder(); 
b.Path = input.Path; //this is just the path portion of the input URL. 
b.scheme = "http"; 
b.host = "localhost"; // fix the host so machine name isn't an issue 

input = b.Uri; 
URI relative = baseUri.MakeRelative(input); 
+0

這並不完全按預期方式工作 - 我會在我的問題闡述。 – Justin 2010-07-12 22:43:05

0

您可以從URL得到的「/」中最後出現的指數,並獲得子,那之後它開始。

1

這是一個非常愚蠢的方式來完成這件事的作品:

var relativeUri = context.Request.Url.AbsolutePath. 
         Substring(baseUri.AbsolutePath.Length);