Как получить адрес электронной почты пользователя на странице макета - PullRequest
0 голосов
/ 15 февраля 2020

Мне нужен адрес электронной почты пользователей в моем представлении макета для панели инструментов. Я попробовал пару вещей, и они, кажется, не работают. Без контроллера я не могу использовать ViewBag. У меня есть область, где я могу получить информацию о пользователях, но она не имеет или не получает электронную почту. Вот как выглядит этот код.

    public static string GetUserInfo(string value)
    {
        var identity = (ClaimsIdentity)Thread.CurrentPrincipal;
        string ReturnVal = string.Empty;

        switch (value)
        {
            case "email":
                ReturnVal = identity.Claims.Where(c => c.Type == ClaimTypes.Email).Select(c => c.Value).SingleOrDefault();
                break;
            case "name":
                ReturnVal = identity.Claims.Where(c => c.Type == ClaimTypes.Name).Select(c => c.Value).SingleOrDefault();
                break;
            case "userid":
                ReturnVal = identity.Claims.Where(c => c.Type == ClaimTypes.NameIdentifier).Select(c => c.Value).SingleOrDefault();
                break;
            case "roleid":
                ReturnVal = identity.Claims.Where(c => c.Type == ClaimTypes.Role).Select(c => c.Value).SingleOrDefault();
                break;
            default:
                ReturnVal = "";
                break;
        }

        return ReturnVal;

    }

Я использую Entity Framework, а приведенный выше код был взят из проекта, который этого не сделал. Я получаю все, кроме электронной почты от него. Возвращает ноль. Есть ли что-то, что мне нужно добавить в IdentityModel с претензиями, чтобы он появился?

Я также пытался использовать это в макете. Но он не позволяет загрузке представления и говорит, что нет связи с базой данных. Однако, когда я закомментирую это, страница загружается без проблем.

 @{ string email = Membership.GetUser().Email; }

Спасибо за вашу помощь!

ОБНОВЛЕНИЕ: я добавил это в свои IdentityModels

userIdentity.AddClaim(new Claim("EmailAddress", this.Email.ToString()));

Который сейчас дает мне электронное письмо, однако в моем GetUserInfo это ноль. Он появляется, если вы наводите курсор на претензии как

{Email: this@email.com}

Если вы наводите курсор мыши на электронную почту в строке

 ReturnVal = identity.Claims.Where(c => c.Type == ClaimTypes.Email).Select(c => c.Value).SingleOrDefault();

Вы получаете

 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress

Итак, я получаю электронная почта, но не так, как это имеет ClaimsPrincipal .. Поэтому я не могу ее получить ..

Любые предложения о том, как правильно оформить претензии ??

ОБНОВЛЕНИЕ: По прихоти я решил изменить строку следующим образом:

userIdentity.AddClaim(new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", this.Email.ToString()));

Я нашел эту информацию - NoWhere! Но это работает! Теперь я получаю адрес электронной почты в той форме, в которой он мне нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...