[英]Facebook Graph API is not returning the property user_birthday
我正在使用Facebook Graph API返回我的应用程序的用户信息。 到目前为止,我只需要将电子邮件作为扩展属性即可使用,而我从来没有遇到任何问题。 但是,现在我必须让用户生日,但是它不能按预期工作。 我得到一个空值。
这是我用来返回信息的类的一部分
using DotNetOpenAuth.OpenId;
using DotNetOpenAuth.OAuth2;
namespace Contoso.Web.Mvc.Controls.Authentication.IdentityProviders
{
public class FacebookIdentityProvider : IdentityProvider
{
public override ActionResult Authenticate(Func<LoginParameters, ActionResult> CallbackFunction)
{
var authorization = fbClient.ProcessUserAuthorization();
var urlHelper = new UrlHelper(System.Web.HttpContext.Current.Request.RequestContext);
if (authorization == null && String.IsNullOrWhiteSpace(Parameters.AccessToken))
{
//Kick off authorization request
fbClient.RequestUserAuthorization(scope: new string[] { "email", "user_birthday"});
}
else
{
if(authorization != null)
Parameters.AccessToken = authorization.AccessToken;
var request = WebRequest.Create("https://graph.facebook.com/me?access_token=" + Uri.EscapeDataString(Parameters.AccessToken));
using (var response = request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
var graph = FacebookGraph.Deserialize(responseStream);
var user = GetUser(graph);
var requiresExtraInformation = false;
DoFormAuthenticationAndCreateUserIfNeeded(user, out requiresExtraInformation);
if (requiresExtraInformation)
{
return RedirectToExtraInformationPage(user);
}
return CallbackFunction(Parameters);
}
}
}
return new RedirectResult(urlHelper.Action("Index"));
}
}
[DataContract]
public class FacebookGraph
{
private static DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(FacebookGraph));
[DataMember(Name = "id")]
public long Id { get; set; }
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "first_name")]
public string FirstName { get; set; }
[DataMember(Name = "last_name")]
public string LastName { get; set; }
[DataMember(Name = "email")]
public string Email { get; set; }
[DataMember(Name = "gender")]
public string Gender { get; set; }
[DataMember(Name = "user_birthday")]
public string UserBirthday { get; set; }
public static FacebookGraph Deserialize(string json)
{
if (string.IsNullOrEmpty(json))
{
throw new ArgumentNullException("jsonStream");
}
return Deserialize(new MemoryStream(Encoding.UTF8.GetBytes(json)));
}
public static FacebookGraph Deserialize(Stream jsonStream)
{
if (jsonStream == null)
{
throw new ArgumentNullException("jsonStream");
}
return (FacebookGraph)jsonSerializer.ReadObject(jsonStream);
}
}
}
当我反序列化来自Facebook的响应时,我会获得我需要的所有信息,除了用户生日(它显示为null)。 我检查了一下,我的Facebook个人资料确实有用户生日。
好的,我终于找到了问题,这有点愚蠢,但是我把它留在这里,以防其他人偶然发现。
问题是,即使我请求的是正确的作用域“ user_birthday”,图形对象中的属性也只是称为“ birthday”,因此没有这个
[DataMember(Name = "user_birthday")]
public string UserBirthday { get; set; }
我应该有这个
[DataMember(Name = "birthday")]
public string UserBirthday { get; set; }
就是这样。 现在正在工作!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.