在ASP.NET中使用Live Connect API获取用户电子邮件地址

6
所以我对ASP.NET MVC和Windows Live Connect API还比较新。基本上,我正在尝试将Live登录集成到我的网站中。当用户登录时,Live会请求他们的权限以提供我的应用程序某些信息,并将用户发送到指定了查询字符串的重定向uri。在这里,如果用户是第一次登录网站,我希望将他们的基本信息存储在我的服务器上(名字,姓氏,电子邮件)。我已经能够获取他们的名字和姓氏,但很难找到如何检索他们的主要电子邮件地址。我将解释我目前所做的事情。
我找不到最好的方法将Live connect集成到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调用才能检索电子邮件地址?

另外,我这样做对吗?


为什么您不能在同一请求中获取有关用户的所有其他数据的同时获取电子邮件地址? - cpoDesign
这正是我想要的,但我不知道该如何调用。我不知道是否有一个单独的请求可以获取我需要的所有信息,或者我需要为包括用户电子邮件地址的信息进行单独的请求。 - Danny
Danny,看起来你已经接近成功了:检查一下这个链接,它们在那里也有一些例子:http://msdn.microsoft.com/en-us/library/live/hh243646.aspx#wlemails - cpoDesign
感谢您发布这个。 - invalidusername
1个回答

5

好的,我解决了!

我只需要在我的登录链接中添加"wl.emails"作用域。然后我的GET调用将返回他们的电子邮件地址。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接