Использование Live Connect API в ASP.NET для получения адреса электронной почты пользователя - PullRequest
6 голосов
/ 19 марта 2012

Так что я довольно новичок в ASP.NET MVC и Windows Live Connect API.По сути, я пытаюсь интегрировать вход в систему на моем веб-сайте.Когда пользователи входят в систему, Live запрашивает их разрешение на предоставление определенной информации моему приложению, отправляет пользователя на URI перенаправления, указанный в настройках моего приложения, к которому добавлена ​​строка запроса.Здесь, если пользователь впервые заходит на сайт, я хочу, чтобы его основная информация сохранялась на моем сервере (имя, фамилия, адрес электронной почты).Мне удалось узнать их имя и фамилию, но мне трудно понять, как получить их основной адрес электронной почты.Я объясню, что я сделал до сих пор.

Я не смог найти лучший способ интегрировать Live connect в приложение MVC, поэтому я сделал предположение.Я указал действие контроллера в своем URI перенаправления, в котором используется строка кода «code» для создания сообщения HTTP.

HttpRequest req = System.Web.HttpContext.Current.Request;

            string myAuthCode = req.QueryString["code"];
            string myAppId = ConfigurationManager.AppSettings.Get("wll_appid");
            string mySecret = ConfigurationManager.AppSettings.Get("wll_secret");
            string postData = "client_id=" + myAppId + "&redirect_uri=http%3A%2F%2Fmscontestplatformtest.com%2FContestPlatform%2FUser%2FSignIn&client_secret=" + mySecret + "&code=" + myAuthCode + "&grant_type=authorization_code";

            byte[] byteArray = Encoding.UTF8.GetBytes(postData);

            WebRequest request = WebRequest.Create("https://oauth.live.com/token");
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = byteArray.Length;
            request.Method = "POST";

Получите строковый ответ в формате JSON и извлеките access_token.Затем я использую этот токен доступа для создания HTTP-вызова GET следующим образом.

request = WebRequest.Create("https://apis.live.net/v5.0/me?access_token=" + r.access_token);
            response = request.GetResponse();
            reader = new StreamReader(response.GetResponseStream());

            string userInfo = reader.ReadToEnd(); 

Приведенный выше вызов GET предоставляет мне следующую строку JSON:

{ 
    "id": "02b4b930697bbea1", 
    "name": "Daniel Hines", 
    "first_name": "Daniel", 
    "last_name": "Hines", 
    "link": "http://profile.live.com/cid-02b4b930697bbea1/", 
    "gender": "male", 
    "locale": "en_US", 
    "updated_time": "2011-10-14T21:40:38+0000" 
} 

, которая является общедоступной информацией иотлично, у меня есть почти все, что мне нужно, кроме их основного адреса электронной почты.Какой вызов GET мне нужен для получения электронной почты?

Кроме того, я делаю это правильно?

1 Ответ

5 голосов
/ 19 марта 2012

Хорошо, я понял!

Мне просто нужно было добавить область "wl.emails" к моей ссылке для входа.Тогда мой вызов GET вернет их адреса электронной почты.

...