15

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

网址是这样的:

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

3 回答 3

49

我认为您可以从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;
于 2013-05-20T19:02:06.793 回答
5

这可能是一个迟到的答案,但我发现自己最近试图解析一些 URL,我继续使用 和 的组合,Uri如此System.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"];

请注意,在这两种情况下,您都将使用strings,并且在使用段时会特别疲倦。

于 2017-06-05T18:28:33.703 回答
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__ 等形式的播放列表,以便在 Google API 中使用。

于 2016-12-14T12:34:10.710 回答