在 ASP.NET 中使用 Live Connect API 检索用户的电子邮件地址

Posted

技术标签:

【中文标题】在 ASP.NET 中使用 Live Connect API 检索用户的电子邮件地址【英文标题】:Using Live Connect API in ASP.NET to retrieve a user's email address 【发布时间】:2012-04-03 17:42:20 【问题描述】:

所以我对 ASP.NET MVC 和 Windows Live Connect API 还是很陌生。基本上我正在尝试将实时登录集成到我的网站中。当用户登录时,Live 请求他们允许向我的应用程序提供某些信息,将用户发送到我的应用程序设置中指定的重定向 uri,并附加一个查询字符串。在这里,如果用户是第一次登录网站,我希望他们的基本信息存储在我的服务器上(名字、姓氏、电子邮件)。我已经能够获得他们的名字和姓氏,但是很难找出如何检索他们的主要电子邮件地址。我会解释我到目前为止所做的事情。

我找不到将 Live Connect 集成到 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 调用来检索电子邮件?

另外,我这样做对吗?

【问题讨论】:

为什么您没有在同一个呼叫中获得电子邮件地址,因为您必须在同一个请求中检索有关用户的所有其他数据? 这就是我想要的,但我不知道该调用的外观。我不知道是否可以提出一个请求来获取我需要的所有信息,或者我是否需要单独请求包含用户电子邮件地址的信息。 丹尼,看来你快到了:检查这个链接他们也有一些例子:msdn.microsoft.com/en-us/library/live/hh243646.aspx#wlemails 感谢您发布此内容。 【参考方案1】:

好的,我想通了!

我只需要将范围“wl.emails”添加到我的登录链接。然后我的 GET 电话将返回他们的电子邮件地址。

【讨论】:

以上是关于在 ASP.NET 中使用 Live Connect API 检索用户的电子邮件地址的主要内容,如果未能解决你的问题,请参考以下文章

如何让asp.net成员提供者和实体框架共享同一个数据库

ASP.Net 5 RC2 配置节绑定

jQuery、JSON 和 ASP.NET 页面方法

ASP.NET MVC 中密码重置的最佳实践

在.NET中管理多个服务引用的最佳方法

like 使用参数的 npgsql 语句