2013-03-30 1 views
24

Dopo la richiesta POST/GET ottengo tale URL indietro che ho bisogno di analizzare, ovviamente posso andare a usare spit() per ottenere le informazioni richieste, ma di sicuro dovrebbe essere il modo più elegante per farlo. Qualche idea?Modo elegante analizzando l'URL

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

Sto parsing per: access token e expires_in

+1

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

+1

possibile duplicato di [Ottieni parametri url da una stringa in .NET] (http://stackoverflow.com/questions/659887/get -url-parameters-from-a-string-in-net) –

risposta

32

Uso della classe URI si può fare questo:

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

hm. Ho esaminato la classe URI ma non sono riuscito a capire come utilizzare i parametri del pars. qualche esempio? –

+0

uri.Query.Split ('&') dovrebbe darti tutti i parametri della stringa di query, quando puoi fare una divisione di "=" per separare il valore dal nome. – ryudice

+7

uso migliore HttpUtility.ParseQueryString http://stackoverflow.com/a/659929/351383 –

26

Usa 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"); 

Questo anche fare il trucco

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

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

Suggerimento: Potrebbe essere necessario

using System.Web; 

e aggiungere un riferimento a System.Web

11

Ci sono diversi modi si può fare Questo. Uno è che si può semplicemente utilizzare il metodo Uri.Query per ottenere la stringa di query e quindi analizzare tramite lo & s. Un altro è che è possibile utilizzare il metodo Uri.Query e quindi utilizzare HttpUtility.ParseQueryString per analizzare la stringa di query come NameValueCollection, che potrebbe essere il percorso preferito.

vedere l'esempio di seguito:

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); 

È ora possibile eseguire operazioni simili a come si dovrebbe fare con un oggetto Dictionary. In questo modo:

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

Questo ha la stessa funzionalità cosa @Jeroen Bouman ha mostrato, ma si divide a parte le diverse funzioni in modo da poter capire ciò che ogni pezzo fa singolarmente.

Riferimenti:

Uri.Query

HttpUtility.ParseQueryString

NameValueCollection