繁体   English   中英

Facebook Graph API没有返回属性user_birthday

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM