Подтвердить что ты не робот

Элегантный синтаксический анализ URL

После запроса POST/GET я получаю такой URL-адрес, который мне нужно проанализировать, конечно, я могу пойти и использовать spit() для получения требуемой информации, но наверняка должен быть более элегантный способ сделать это. Любые идеи?

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

Я анализирую для: access token и expires_in

4b9b3361

Ответ 1

Используя класс URI, вы можете сделать это:

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

Ответ 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