如何在C#中解析HTTP URL?

我的要求是解析Http Urls并相应地调用函数。 在我当前的实现中,我使用嵌套的if-else语句,我认为这不是一种优化方式。 你能建议一些其他有效的approch吗?

url如下:

  • server/func1
  • server/func1/SubFunc1
  • server/func1/SubFunc2
  • server/func2/SubFunc1
  • server/func2/SubFunc2

我认为你可以从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; 

这可能是一个迟到的答案,但我发现自己最近试图解析一些URL,我使用UriSystem.Web.HttpUtility的组合,如此处所示,我的URL就像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,并在处理段时特别疲惫。

我将Suncat2000的答案中的拆分与字符串拆分相结合,以获得URL的有趣function。 我从另一个页面传递一个完整的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__等表格中的播放列表,供Google API使用。