2012-03-19 25 views
6

Vì vậy, tôi khá mới với ASP.NET MVC và Windows Live Connect API. Về cơ bản, tôi đang cố gắng tích hợp Đăng nhập trực tiếp vào trang web của mình. Khi người dùng đăng nhập, Live yêu cầu sự cho phép của họ để cung cấp thông tin nhất định cho ứng dụng của tôi, gửi người dùng đến một uri chuyển hướng được chỉ định trong cài đặt ứng dụng của tôi được nối thêm với chuỗi truy vấn. Ở đây, nếu người dùng đăng nhập vào trang web lần đầu tiên, tôi muốn thông tin cơ bản của họ được lưu trữ trên máy chủ của tôi (họ, tên, email). Tôi đã có thể nhận được họ và tên của họ, nhưng tôi đang gặp khó khăn trong việc tìm ra cách lấy địa chỉ email chính của họ. Tôi sẽ giải thích những gì tôi đã làm cho đến nay.Sử dụng API Kết nối Trực tiếp trong ASP.NET để truy xuất địa chỉ email của người dùng

Tôi không thể tìm thấy cách tốt nhất để tích hợp Trực tiếp kết nối vào ứng dụng MVC vì vậy tôi đã đoán tốt nhất của mình. Tôi đã chỉ định một hành động điều khiển trong uri chuyển hướng của tôi có chuỗi truy vấn "mã" để tạo một HTTP Post.

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"; 

Nhận phản hồi chuỗi có định dạng JSON và trích xuất access_token. Sau đó, tôi sử dụng mã thông báo truy cập này để tạo một cuộc gọi HTTP GET như sau.

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

Cuộc gọi GET trên đây cung cấp cho tôi với chuỗi JSON này:

{ 
    "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" 
} 

Đó là tất cả thông tin công cộng và là tuyệt vời, tôi có gần như tất cả mọi thứ tôi cần, ngoại trừ địa chỉ email chính của họ. Tôi cần phải nhận loại cuộc gọi GET nào để truy xuất email?

Ngoài ra, tôi có đang làm đúng cách này không?

+0

Tại sao bạn không nhận được địa chỉ email trong cùng một cuộc gọi vì bạn phải truy xuất tất cả dữ liệu khác về người dùng trong cùng một yêu cầu? – cpoDesign

+0

Đó là những gì tôi muốn, nhưng tôi không biết cách gọi đó. Tôi không biết nếu có một yêu cầu duy nhất tôi có thể thực hiện để có được tất cả thông tin tôi cần hoặc nếu tôi cần thực hiện một yêu cầu riêng cho thông tin sẽ bao gồm địa chỉ email của người dùng. – Danny

+0

Danny, có vẻ như bạn đang ở gần đó: kiểm tra liên kết này họ có một số ví dụ ở đó: http://msdn.microsoft.com/en-us/library/live/hh243646.aspx#wlemails – cpoDesign

Trả lời

5

Ok tôi đã tìm ra!

Tôi chỉ cần thêm phạm vi "wl.emails" vào liên kết đăng nhập của mình. Sau đó, cuộc gọi GET của tôi sẽ trả lại địa chỉ email của họ.

+2

Bạn có thể cung cấp mã mẫu cho liên kết đăng nhập của mình không? – wloescher

Các vấn đề liên quan