优雅的方式解析URL

Bil*_*tes 37 c# parsing

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

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

我正在解析:access tokenexpires_in

ryu*_*ice 45

使用URI类可以执行以下操作:

var url = new Uri("your url");
Run Code Online (Sandbox Code Playgroud)

  • 你没有回答他的问题,他想要`access_token`和`expires_in` (12认同)
  • 更好地使用HttpUtility.ParseQueryString http://stackoverflow.com/a/659929/351383 (10认同)
  • 此外,您还可以使用“Uri.TryCreate”来更优雅地处理提供的字符串不是有效 Uri 的情况。 (3认同)
  • 嗯..我查看了 URI 类,但无法弄清楚如何使用它来解析参数。有什么例子吗? (2认同)

Jer*_*man 37

使用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");
Run Code Online (Sandbox Code Playgroud)

这也可以解决问题

String access_token = HttpUtility.ParseQueryString(myUri.Query).Get(0);
Run Code Online (Sandbox Code Playgroud)

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

提示:您可能需要

using System.Web;
Run Code Online (Sandbox Code Playgroud)

并添加对System.Web的引用


Bla*_*g23 13

有几种方法可以做到这一点.一个是你可以简单地使用该Uri.Query方法获取查询字符串,然后通过&s解析.另一个是您可以使用该Uri.Query方法然后使用HttpUtility.ParseQueryString将查询字符串解析为a 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);
Run Code Online (Sandbox Code Playgroud)

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

string accessToken = queryParams["access_token"];
string expiresIn = queryParams["expires_in"];
Run Code Online (Sandbox Code Playgroud)

它具有与@Jeroen Bouman所展示的功能相同的功能,但将不同的功能分开,以便您可以了解每个部分的功能.

参考文献:

Uri.Query

HttpUtility.ParseQueryString

NameValueCollection中