Dotnetopenauth,从facebook范围检索电子邮件

时间:2012-01-11 15:40:41

标签: asp.net facebook json dotnetopenauth

有一个问题我在搜索时无法找到答案。

如果我要求用户发送来自Facebook的电子邮件,请执行以下操作:

var scope = new List<string>();
                scope.Add("email");
                FbClient.RequestUserAuthorization(scope);

如何检索它?我无法在FacebookGraph中找到明确的选项。

3 个答案:

答案 0 :(得分:3)

我可以说,DotNetOpenAuth示例中的FacebookGraph对象不支持更改您收到的字段。但是,由于它正在提示的WebRequest返回一个JSON字符串,您可以自己解析它(或使用另一个JSON解析器)。这正是我所做的,使用NewtonSoft.Json.dll

//as part of the uri for the webrequest, include all the fields you want to use
var request = WebRequest.Create("https://graph.facebook.com/me?fields=email,name&access_token=" + Uri.EscapeDataString(authorization.AccessToken));
using (var response = request.GetResponse())
{
    using (var responseStream = response.GetResponseStream())
    {
        System.IO.StreamReader streamReader = new System.IO.StreamReader(responseStream, true);
        string MyStr = streamReader.ReadToEnd();
        JObject userInfo = JObject.Parse(MyStr);

        //now you can access elements via: 
        // (string)userInfo["name"], userInfo["email"], userInfo["id"], etc.
    }
}

请注意,您指定要作为WebRequest URI的一部分发回的字段。可以在https://developers.facebook.com/docs/reference/api/user/

找到可用的字段

答案 1 :(得分:2)

使用DNOA This answer为我做了这件事。

刚刚添加以下内容:

var scope = new List<string>();
scope.Add("email");

client.RequestUserAuthorization(scope);

以及以下的facebook图表。

[DataMember(Name = "email")]
public string EMail { get; set; }

答案 2 :(得分:0)

您上面写的内容似乎是要求用户授权,以便在您查询用户的对象时允许您的应用收回电子邮件。要查询用户的对象,请执行HTTP Get on https://graph.facebook.com/me。在https://developers.facebook.com/tools/explorer

的Graph API资源管理器工具中试用