Мне нужен адрес электронной почты пользователей в моем представлении макета для панели инструментов. Я попробовал пару вещей, и они, кажется, не работают. Без контроллера я не могу использовать 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! Но это работает! Теперь я получаю адрес электронной почты в той форме, в которой он мне нужен.