【问题标题】:Elegant way parsing URL优雅的方式解析 URL
【发布时间】:2013-03-30 00:35:24
【问题描述】:

在 POST/GET 请求之后,我得到了我需要解析的 URL,当然我可以去使用 spit() 来获取所需的信息,但肯定应该是更优雅的方式。有什么想法吗?

http://api.vkontakte.ru/blank.html#access_token=8860213c0a392ba0971fb35bdfb0z605d459a9dcf9d2208ab60e714c3367681c6d091aa12a3fdd31a4872&expires_in=86400&user_id=34558123

我正在解析:access token 和 expires_in

【问题讨论】:

标签: c# parsing


【解决方案1】:

使用URI 类,您可以这样做:

var url = new Uri("your url");

【讨论】:

  • hm.. 我查看了 URI 类,但无法弄清楚如何使用它解析参数。有什么例子吗?
  • uri.Query.Split('&') 应该为您提供所有查询字符串参数,当您可以通过“=”进行拆分以将值与名称分开时。
  • 你没有回答他的问题,他想要access_token和expires_in
  • Uri.Query 单独保存查询参数。 Uri.PathAndQuery 用? 分隔路径和查询参数。如果您希望它们成为单独的变量,显然Uri.Path 会保留路径。
  • 您还可以使用Uri.TryCreate 更优雅地处理提供的字符串不是有效 Uri 的情况。
【解决方案2】:

使用 Uri + ParseQueryString 函数:

Uri myUri = new Uri("http://api.vkontakte.ru/blank.html#access_token=8860213c0a392ba0971fb35bdfb0z605d459a9dcf9d2208ab60e714c3367681c6d091aa12a3fdd31a4872&expires_in=86400&user_id=34558123");

String access_token = HttpUtility.ParseQueryString(myUri.Query).Get("access_token");
String expires_in = HttpUtility.ParseQueryString(myUri.Query).Get("expires_in");

这也可以解决问题

String access_token = HttpUtility.ParseQueryString(myUri.Query).Get(0);

来源:https://msdn.microsoft.com/en-us/library/ms150046.aspx

提示:您可能需要

using System.Web;

并添加对 System.Web 的引用

【讨论】:

    【解决方案3】:

    有几种方法可以做到这一点。一种是你可以简单地使用Uri.Query 方法获取查询字符串,然后通过&s 进行解析。另一个是您可以使用Uri.Query 方法,然后使用HttpUtility.ParseQueryString 将查询字符串解析为NameValueCollection,这可能是您的首选路线。

    请看下面的例子:

    using System.Web; // For HttpUtility
    
    // The original URL:
    Uri unparsedUrl = new Uri("http://api.vkontakte.ru/blank.html#access_token=8860213c0a392ba0971fb35bdfb0z605d459a9dcf9d2208ab60e714c3367681c6d091aa12a3fdd31a4872&expires_in=86400&user_id=34558123");
    // Grabs the query string from the URL:
    string query = unparsedUrl.Query; 
    // Parses the query string as a NameValueCollection:
    var queryParams = HttpUtility.ParseQueryString(query);
    

    您现在可以执行类似于处理Dictionary 对象的操作。像这样:

    string accessToken = queryParams["access_token"];
    string expiresIn = queryParams["expires_in"];
    

    这与@Jeroen Bouman 展示的功能相同,但将不同的功能分开,以便您了解每个部分的单独作用。

    参考资料:

    Uri.Query

    HttpUtility.ParseQueryString

    NameValueCollection

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2018-05-31
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多