При авторизации через API ВКонтакте происходит переадресация на URL вида:
http://localhost:58821/Auth#access_token=123456712345123451234512345&expires_in=0&user_id=1234567
Обращение к Request.Url.AbsolutePath, Request.Url.AbsoluteUri или Request.RawUrl даёт только ссылку на хост. Как я могу получить параметры из данного URL?
Upd.: Вероятно проблема в том что адрес и get параметры разделяются символом '#', а не '?', поэтому параметры получить не получается. Можно ли как-то получить всю строку?
Ответ
Вы ошиблись при выборе типа авторизации - вам необходимо использовать авторизацию предназначенную не для мобильных приложений(клиентскую), а для сайтов(серверную).
При этом, необходимо что бы ваш веб-сервер был доступен извне - если не по домену, то хотя бы по какому-то публичному ip. С localhost серверную авторизацию использовать не получится.
Если бы это у вас был клиентский код, то можно было бы добавить себе в проект сборку System.Web и использовать код вроде такого:
var uri = new Uri("http://localhost:58821/Auth#access_token=123&expires_in=0&user_id=456");
var fragment = uri.Fragment.TrimStart('#'); // access_token=123&expires_in=0&user_id=456
var access_token = HttpUtility.ParseQueryString(fragment).Get("access_token"); // 123
Однако у вас сайт на ASP.NET, и фрагмент(часть Uri начинающаяся с '#') из серверного кода вы не получите никак - клиентом он не передаётся.
В вашем случае использовать авторизацию для мобильных устройств нельзя. Точнее конечно можно выпрашивать у пользователя их настоящие логин/пароль, передавать их вместо пользователя, авторизовывать своё приложение, да сохранять токен - но это плохо попахивает, и обязательно вызовет недоверие у пользователей.
Комментариев нет:
Отправить комментарий