2013-03-30 140 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