【问题标题】:How can I parse HTTP urls in C#?如何在 C# 中解析 HTTP url?
【发布时间】:2013-01-19 01:24:18
【问题描述】:

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

网址如下:

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

【问题讨论】:

  • 如果你只需要函数名,那么拆分 url 并只获取最后一个标记呢?
  • 你能更清楚你所说的“解析”是什么意思吗?我假设您要提取一些特定的数据;但是什么部分和目的?
  • 我得到的网址有很多种。它包含属性,也包含uri中的有用值。
  • 你想要stackoverflow.com/questions/70405/…这样的东西吗?您可以在“/”中拆分网址并遍历每个令牌。
  • 但是我必须再次使用嵌套的 if else 语句...

标签: c# parsing url


【解决方案1】:

这可能是一个迟到的答案,但我发现自己最近尝试解析一些 URL,我继续使用 UriSystem.Web.HttpUtility 的组合,如 here 所示,我的 URL 就像 @987654324 @所以这就是我所做的:

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

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

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

【讨论】:

    【解决方案2】:

    我将 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 中使用。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-29
        • 2018-08-10
        • 2021-08-18
        • 2011-02-09
        相关资源
        最近更新 更多