mvc 4项目如何在使用facebook sdk登录后获得获取facebook用户电子邮件的权限

mvc 4 project how to have permissions to get facebook user email after log in using facebook sdk

我有一个带有 facebook 登录的 mvc4 项目
我想将用户电子邮件添加到用户个人资料 table
这是我的 AuthConfig 代码

     OAuthWebSecurity.RegisterFacebookClient(
                appId: "8919945667880789",
                appSecret: "ce8e0b218047693308cb71");

这是我的 ExternalLoginCallback 代码

   [AllowAnonymous]
        public ActionResult ExternalLoginCallback(string returnUrl)
        {
            AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));
            if (!result.IsSuccessful)
            {
                return RedirectToAction("ExternalLoginFailure");
            }

            if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
            {
                return RedirectToLocal(returnUrl);
            }

            if (User.Identity.IsAuthenticated)
            {
                // If the current user is logged in add the new account
                OAuthWebSecurity.CreateOrUpdateAccount(result.Provider, result.ProviderUserId, User.Identity.Name);
                return RedirectToLocal(returnUrl);
            }
            else
            {
                // User is new, ask for their desired membership name
                // User is new, ask for their desired membership name
                string loginData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId);
                ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName;
                ViewBag.ReturnUrl = returnUrl;
                var client = new **FacebookClient(result.ExtraData["accesstoken"]);
                dynamic me = client.Get("me");
                string UserEmail = me.email; 
                var model = new RegisterExternalLoginModel { UserName = result.UserName, Email = UserEmail, ExternalLoginData = loginData };


                return View("ExternalLoginConfirmation", model);
            }

        }

但是当我调试时我发现 UserEmail = me.email = null
我需要做什么才能从 Facebook 获取用户电子邮件???
非常感谢你的帮助

我所做的一切就是将我的 ExternalLoginCallback 代码编辑成那样

public ActionResult ExternalLoginCallback(string returnUrl)
        {
            AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));
            if (!result.IsSuccessful)
            {
                return RedirectToAction("ExternalLoginFailure");
            }

            if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
            {
                return RedirectToLocal(returnUrl);
            }

            if (User.Identity.IsAuthenticated)
            {
                // If the current user is logged in add the new account
                OAuthWebSecurity.CreateOrUpdateAccount(result.Provider, result.ProviderUserId, User.Identity.Name);
                return RedirectToLocal(returnUrl);
            }
            else
            {
                // User is new, ask for their desired membership name
                // User is new, ask for their desired membership name
                string loginData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId);
                ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName;
                ViewBag.ReturnUrl = returnUrl;



                var fb = new FacebookClient(result.ExtraData["accesstoken"]);
                dynamic myInfo = fb.Get("/me?fields=email"); // specify the email field
               var UserEmail = myInfo.email;



                //var client = new FacebookClient(result.ExtraData["accesstoken"]);
                //dynamic me = client.Get("me");
                //string UserEmail = me.email;
               var model = new RegisterExternalLoginModel { UserName = result.UserName, Email = UserEmail, ExternalLoginData = loginData };


                return View("ExternalLoginConfirmation", model);
            }

        }

这是获取用户邮箱的代码

  var fb = new FacebookClient(result.ExtraData["accesstoken"]);
                    dynamic myInfo = fb.Get("/me?fields=email"); // specify the email field
                   var UserEmail = myInfo.email;

谢谢

  var fb = new FacebookClient(result.ExtraData["accesstoken"]);
                    dynamic myInfo = fb.Get("/me?fields=email"); // specify the email field
                   var UserEmail = myInfo.email;

没关系,但是您的代码介于 if 语句之间

if(OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName;== "facebook"){
code
}