2012-03-19 6 views
6

Quindi sono abbastanza nuovo per ASP.NET MVC e Windows Live Connect API. Fondamentalmente sto cercando di integrare l'accesso Live nel mio sito web. Quando gli utenti eseguono l'accesso, Live richiede il permesso di fornire determinate informazioni alla mia app, invia l'utente a un ire di reindirizzamento specificato nelle impostazioni della mia app aggiunte alla querystring. Qui, se l'utente accede al sito per la prima volta, voglio che le loro informazioni di base siano memorizzate sul mio server (nome, cognome, email). Sono stato in grado di ottenere il loro nome e cognome, ma sto avendo difficoltà a scoprire come recuperare il loro indirizzo email principale. Spiegherò cosa ho fatto finora.Utilizzo dell'API Live Connect in ASP.NET per recuperare l'indirizzo e-mail di un utente

Non sono riuscito a trovare il modo migliore per integrare la connessione Live in un'app MVC, quindi ho fatto la mia ipotesi. Ho specificato un'azione controller nel mio reindirizzamento uri che utilizza il "codice" di querystring per costruire un post 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"; 

Ottieni la risposta stringa in formato JSON ed estrai il token di accesso. Quindi uso questo token di accesso per costruire una chiamata HTTP GET come segue.

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

La chiamata GET sopra di me dà questa stringa 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" 
} 

Che è tutte le informazioni pubbliche ed è grande, ho quasi tutto quello che serve, tranne il loro indirizzo email principale. Che tipo di chiamata GET ho bisogno di recuperare e-mail?

Inoltre, sto facendo bene?

+0

Perché non si ottiene l'indirizzo di posta elettronica nella stessa chiamata in quanto è necessario recuperare tutti gli altri dati sull'utente nella stessa richiesta? – cpoDesign

+0

Questo è quello che voglio, ma non so come dovrebbe apparire quella chiamata. Non so se c'è una singola richiesta che posso fare per ottenere tutte le informazioni di cui ho bisogno o se devo fare una richiesta separata di informazioni che includa l'indirizzo email dell'utente. – Danny

+0

Danny, sembra che tu sia quasi arrivato: controlla questo link, ci sono anche degli esempi: http://msdn.microsoft.com/en-us/library/live/hh243646.aspx#wlemails – cpoDesign

risposta

5

Ok l'ho capito!

Ho solo bisogno di aggiungere l'ambito "wl.emails" al mio collegamento di accesso. Quindi la mia chiamata GET restituirà i loro indirizzi email.

+2

Puoi fornire un codice di esempio per il tuo collegamento di accesso? – wloescher