2012-03-19 14 views
6

ASP.NET MVCとWindows Live Connect APIはかなり新しくなっています。基本的に私は自分のウェブサイトにライブサインインを統合しようとしています。ユーザーがサインインすると、Liveは自分のアプリに特定の情報を与える許可を要求し、クエリの文字列が付加された自分のアプリ設定で指定されたリダイレクトURIにユーザーを送ります。ここで、ユーザーが最初にサイトにサインインしている場合、自分のサーバーに保存されている基本情報(名、姓、電子メール)が必要です。私は彼らの名字を得ることができましたが、彼らの主要な電子メールアドレスを取得する方法を見つけるのは苦労しています。私は今まで何をしてきたのか説明します。ASP.NETでLive Connect APIを使用してユーザーの電子メールアドレスを取得する

ライブ接続をMVCアプリケーションに統合する最善の方法を見つけることができなかったので、私は推測しました。リダイレクトuriでコントローラのアクションを指定しました。これはクエリ文字列 "code"を使って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"; 

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コールが必要ですか?

また、私はこの正しい方法をしていますか?

+0

同じリクエストで他のすべてのデータを取得する必要があるのと同じ呼び出しで電子メールアドレスを取得できないのはなぜですか? – cpoDesign

+0

それは私が欲しいものですが、その呼び出しがどのように見えるのか分かりません。私は必要なすべての情報を得るために、またはユーザーの電子メールアドレスを含む情報のための別の要求をする必要がある場合、私ができる1つの要求があるかどうかはわかりません。 – Danny

+0

ダニー、あなたがそこにいるようです:このリンクをチェックすると、そこにもいくつかの例があります:http://msdn.microsoft.com/en-us/library/live/hh243646.aspx#wlemails – cpoDesign

答えて

5

私はそれを理解しました!

私のサインインリンクにスコープ "wl.emails"を追加するだけで済みました。その後、私のGETコールは自分のEメールアドレスを返します。

+2

サインインリンクのサンプルコードを提供できますか? – wloescher

関連する問題