如何在 C# 中解析 HTTP URL?

17

我的需求是解析 Http Urls 并根据需要调用函数。在我当前的实现中,我正在使用嵌套的 if-else 语句,我认为这不是最优化的方式。你能否提供一些其他有效的方法?

这些 Urls 如下:

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

如果你只需要函数名,那么分割URL并获取最后一个标记怎么样? - SamGamgee
1
你能具体说明一下“解析”的含义吗?我猜你想要提取某些特定的数据,但是是哪部分数据以及用于什么目的呢? - Eamon Nerbonne
我收到了很多种不同的URLs,它们包含了属性和有用的值在URIs中。 - vijay053
但是我又不得不使用嵌套的if else语句... - vijay053
有嵌套的if/else语句的替代方案。switch是一个选择,使用表查找也是一个选择。但是如果没有更多关于你正在做什么的信息,就不可能给出任何建议。 - Jim Mischel
3个回答

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

7

这可能有点晚了,但我最近发现自己正在尝试解析一些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"];

请注意,在这两种情况下,您将使用字符串,在处理片段时要特别小心。

0
我将Suncat2000的答案中的split与字符串分割结合起来,以获取URL的有趣特征。我将一个包含https等完整Uri的导航参数e.Parameter从另一页传递进来:
Uri playlistUri = (Uri)e.Parameter;
string youtubePlaylistUnParsed = playlistUri.Query;
char delimiterChar = '=';
string[] sections = youtubePlaylistUnParsed.Split(delimiterChar);
string YoutubePlaylist = sections[1];

这将为我获取以 PLs__ 等形式的播放列表,以便在 Google APIs 中使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接