2012-03-19 10 views
6

Jestem więc całkiem nowym użytkownikiem ASP.NET MVC i interfejsu API Windows Live Connect. Zasadniczo próbuję zintegrować logowanie na żywo z moją witryną. Gdy użytkownicy się logują, na Żądanie prosi o pozwolenie na podanie mojej aplikacji określonych informacji, wysyła użytkownika do przekierowania uri określonego w ustawieniach mojej aplikacji z dodatkowym zapytaniem. Tutaj, jeśli użytkownik loguje się do witryny po raz pierwszy, chcę przechowywać podstawowe informacje na moim serwerze (imię, nazwisko, adres e-mail). Udało mi się zdobyć ich imię i nazwisko, ale mam problem ze znalezieniem podstawowego adresu e-mail. Wyjaśnię, co zrobiłem do tej pory.Korzystanie z interfejsu API Live Connect w środowisku ASP.NET w celu pobrania adresu e-mail użytkownika

Nie mogłem znaleźć najlepszego sposobu na integrację Live connect z aplikacją MVC, więc domyśliłem się. Określiłem działanie kontrolera w moim uri przekierowania, które pobiera "kod" w celu utworzenia Posta 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"; 

Uzyskaj odpowiedź łańcuchową sformatowaną w JSON i wyodrębnij atrybut access_token. Następnie używam tego tokenu dostępu, aby skonstruować wywołanie HTTP GET w następujący sposób.

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

Wezwanie GET powyżej daje mi ten ciąg 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" 
} 

Który wszystkich publicznych informacji i jest super, mam prawie wszystko, co potrzeba oprócz swojego podstawowego adresu e-mail. Jakiego rodzaju połączenia GET potrzebuję, aby pobrać wiadomość e-mail?

Czy robię to w odpowiedni sposób?

+0

Dlaczego nie otrzymujesz adresu e-mail w tym samym zgłoszeniu, ponieważ musisz odzyskać wszystkie inne dane o użytkowniku w tym samym żądaniu? – cpoDesign

+0

Tego właśnie chcę, ale nie wiem, jak powinien wyglądać ten telefon. Nie wiem, czy mogę złożyć jedno żądanie, aby uzyskać wszystkie potrzebne informacje lub czy muszę złożyć osobne zapytanie o informacje, które będą zawierać adres e-mail użytkownika. – Danny

+0

Danny, wydaje się, że już prawie tam jesteś: sprawdź ten link, mają tam również kilka przykładów: http://msdn.microsoft.com/en-us/library/live/hh243646.aspx#wlemails – cpoDesign

Odpowiedz

5

OK Rozgryzłem to!

Wystarczy dodać zakres "wl.emails" do mojego linku logowania. Wtedy moje wywołanie GET zwróci ich adresy e-mail.

+2

Czy możesz podać przykładowy kod linku do logowania? – wloescher