SDK do C # do Facebook, problemas ao obter o email do usuário

Estou usando o Facebook C # SDK e obtive uma amostra de como configurar um login e obter algumas informações do usuário para me registrar no meu site. No entanto, fiquei preso nas informações de email. É sempre nulo.

Verifiquei alguns posts relacionados aqui, mas nenhum resolve o meu problema. Todas as informações de que preciso estão chegando, apenas faltam emails e aniversários.

Meu código na página parcial shtml é assim:

<div id="fb-root"></div>
<fb:login-button id="fblogin" onlogin="window.open('http://' + location.host + '/Facebook/LogOn', '_self')" perms='email'></fb:login-button>
<script>
    window.fbAsyncInit = function () {
        FB.init({
            appId: '@Facebook.FacebookApplication.Current.AppId',
            cookie: true,
            xfbml: true,
            oauth: true
        });

        function facebooklogin() {
            FB.login(function (response) {
                if (response.authResponse) {
                    // user authorized
                    //window.location.reload();
                    window.open("http://" + location.host + "/Facebook/LogOn", "_self")
                } else {
                    // user cancelled
                }
            }, { scope: '@ViewBag.ExtendedPermissions' });
        };

        $(function () {
            // make the button is only enabled after the facebook js sdk has been loaded.
            $('#fblogin').attr('disabled', false).click(facebooklogin);
        });
    };
    (function () {
        var e = document.createElement('script'); e.async = true;
        e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
        document.getElementById('fb-root').appendChild(e);
    } ());
</script>

E meu código no Facebook Controller:

public ActionResult LogOn()
{
    var fbWebContext = new FacebookWebContext(); // or FacebookWebContext.Current;

    if (fbWebContext.IsAuthorized())
    {
        var fb = new FacebookWebClient();
        dynamic me = fb.Get("me");

        //Creating new User with Facebook credentials
        var id = 0;
        var nickname = me.first_name;
        var password = "";
        var email = me.email;
        var picture = string.Format("http://graph.facebok.com/{0}/picture?type=large", me.id);
        var thumbnail = string.Format("http://graph.facebok.com/{0}/picture?type=normal", me.id);
        var fullName = me.name;
        var gender = "";
        if (me.gender == "male") gender = "Masculino";
        if (me.gender == "female") gender = "Feminino";
        var birthdate = Convert.ToDateTime(me.birthday);

        //Does the user already exist?
        if (DAUser.UserAlreadyExists(email))
        {
            ViewBag.Message = "O seu e-mail já foi cadastrado em nosso site. Por favor, cadastre outro e-mail.";
            return View("~/Views/Shared/Erro.cshtml");
        }
        else
        {
            id = DAUser.Create(nickname, email, password, "facebook");
        }

        //Updating created user information
        User user = db.User.Find(id);
        TryUpdateModel(user);
        user.Picture = picture;
        user.Thumbnail = thumbnail;
        user.Nickname = nickname;
        user.FullName = fullName;
        user.Gender = gender;
        if (!String.IsNullOrEmpty(birthdate))
        {
            user.Birthdate = Convert.ToDateTime(birthdate);
        }

        db.SaveChanges();
        Session["loginType"] = "Facebook";

        return RedirectToAction("Mural", "Home");
    }
    else
    {
        ViewBag.Message = "Não foi possível completar o seu login via Facebook.";
        return View("~/Views/Shared/Erro.cshtml");
    }
}

Se eu colocar essas linhas, como mostra a amostra:

[FacebookAuthorize(Permissions = ExtendedPermissions)]

if (fbWebContext.IsAuthorized(ExtendedPermissions.Split(',')))

Minha parada de aplicativo funciona.

Alguém tem uma solução? Ou outro exemplo de código para obter autorização para solicitar email e aniversário?

Edita

O problema foi esta linha:

}, { scope: '@ViewBag.ExtendedPermissions' });

No meu aplicativo deve ser:

}, { scope: 'email,user_birthday,user_hometown' }); //alter to get permission to access user data

Não defini um escopo (permissões) para o acesso ao facebook ... mas agora tenho outra pergunta.

Minha cultura DateTime é dd / MM / aaaa e o aniversário do Facebook é configurado como MM / dd / aaaa. Tentei o seguinte:

var birthdate = DateTime.Parse(me.birthday, CultureInfo.CreateSpecificCulture("pt-BR"));

Porque minha cultura é brasileira, mas ainda recebo o erro DateTime:

String was not recognized as a valid DateTime.

Alguém sabe como resolver isso?

questionAnswers(1)

yourAnswerToTheQuestion