2013-03-30 93 views
24

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

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

我解析为:access tokenexpires_in

+1

Uri类? http://msdn.microsoft.com/en-us/library/system.uri.aspx –

+1

[从.NET中的字符串获取URL参数]的可能重复(http://stackoverflow.com/questions/659887/get -url-parameters-from-a-string-in-net) –

回答

32

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

var url = new Uri('your url'); 
+1

hm ..我查看了URI类,但无法弄清楚如何使用它来分析参数。任何例子? –

+0

uri.Query.Split('&')应该为您提供所有查询字符串参数,当您可以通过“=”进行分隔以将名称与值分开时。 – ryudice

+7

更好用HttpUtility.ParseQueryString http://stackoverflow.com/a/659929/351383 –

26

使用乌里+ 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

11

有几种方法可以做到这个。一种是你可以简单地使用Uri.Query方法来获取查询字符串,然后通过&进行解析。另一种方法是,您可以使用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布曼表现,但分裂开来的不同的功能可以让你了解每个部分单独做。

参考文献:

Uri.Query

HttpUtility.ParseQueryString

NameValueCollection