6

そのため、私は ASP.NET MVC と Windows Live Connect API にかなり慣れていません。基本的に、ライブ サインインを自分の Web サイトに統合しようとしています。ユーザーがサインインすると、Live はアプリに特定の情報を提供する許可を要求し、クエリ文字列が追加されたアプリ設定で指定されたリダイレクト URI にユーザーを送信します。ここで、ユーザーが初めてサイトにサインインする場合、基本情報 (名、姓、電子メール) をサーバーに保存します。姓名を取得できましたが、プライマリ メール アドレスを取得する方法を見つけるのに苦労しています。今までやってきたことを説明します。

ライブ コネクトを MVC アプリに統合する最良の方法が見つからなかったので、最善の推測を行いました。リダイレクト URI で、クエリ文字列「コード」を使用して 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 呼び出しが必要ですか?

また、私はこれを正しい方法で行っていますか?

4

1 に答える 1

5

わかりました!

スコープ「wl.emails」をサインイン リンクに追加する必要がありました。次に、GET 呼び出しでメール アドレスが返されます。

于 2012-03-19T08:35:36.337 に答える