2013-02-04 22 views
9

我的要求是相應地解析Http Url和調用函數。在我目前的實現中,我使用嵌套的if-else語句,我認爲這不是一種優化的方式。你能否建議其他有效的方法?如何解析C#中的HTTP URL?

URL是這樣的:

  • server/func1
  • server/func1/SubFunc1
  • server/func1/SubFunc2
  • server/func2/SubFunc1
  • server/func2/SubFunc2
+0

如果您只需要函數名稱,那麼如何拆分url並獲取最後一個標記呢? – SamGamgee

+1

你能說清楚「解析」是什麼意思嗎?我假設你想提取一些特定的數據;但是什麼部分和目的呢? –

+0

我有很多類型的網址。它也包含uris中的屬性,有用值。 – vijay053

回答

36

我認爲你可以從System.Uri類中獲得很多用途。爲它提供一個URI,你可以在一些安排中提取出片段。

一些例子:

Uri myUri = new Uri("http://server:8080/func2/SubFunc2?query=somevalue"); 

// Get host part (host name or address and port). Returns "server:8080". 
string hostpart = myUri.Authority; 

// Get path and query string parts. Returns "/func2/SubFunc2?query=somevalue". 
string pathpart = myUri.PathAndQuery; 

// Get path components. Trailing separators. Returns { "/", "func2/", "sunFunc2" }. 
string[] pathsegments = myUri.Segments; 

// Get query string. Returns "?query=somevalue". 
string querystring = myUri.Query; 
0

我組合在Suncat2000的答案用繩子拆分拆分得到的URL有趣的功能。我傳遞一個完整的URI包括HTTPS:從等另一頁的導航參數e.Parameter:

Uri playlistUri = (Uri)e.Parameter; 
string youtubePlaylistUnParsed = playlistUri.Query; 
char delimiterChar = '='; 
string[] sections = youtubePlaylistUnParsed.Split(delimiterChar); 
string YoutubePlaylist = sections[1]; 

這讓我的播放列表中PLs__等形式在谷歌API的使用。

2

這可能會作爲一個有點晚了答案,但我發現自己最近試圖解析一些網址和我一起用的UriSystem.Web.HttpUtility組合所看到here去了,我的網址都像http://one-domain.com/some/segments/{param1}?param2=x....所以這是我做過什麼:

var uri = new Uri(myUrl); 
string param1 = uri.Segments.Last(); 

var parameters = HttpUtility.ParseQueryString(uri.Query); 
string param2 = parameters["param2"]; 

注意到,在這兩種情況下,你會string s內工作,並與段工作時是特別疲憊。