2015-08-19 2 views
1

Я пытаюсь создать приложение чата, я хочу отобразить Имя пользователя. Однако имя пользователя - это их электронная почта, используяSignalR Asp.NET MVC5 Информация о пользователе

var userName = HttpContext.Current.User.Identity.Name.ToString(); 

возвращает свою электронную почту. Как я могу получить доступ к свойству Firstname, которое имеет модель, и к БД.

Когда они регистрируют они должны поставить в имени, а в магазинах БД, я просто не знаю, как показать это в моем чате с моей ChatHub

+0

Глядя на документы для удостоверения личности, кажется, что удерживается только имя - остальное - информация об аутентификации - см. Https://msdn.microsoft.com/en-us/library/system.security.principal.iidentity%28v = vs.110% 29.aspx. Возможно, вам придется извлечь его из db/local cache и отправить обратно в возвращаемый объект. – HockeyJ

+1

Кроме того, вы не должны использовать HttpContext изнутри концентратора. У вас есть Context.User.Identity.Name, доступное внутри концентратора, которое рекомендуется в SignalR. –

ответ

0

Если где-то в пользовательском интерфейсе нужно получить имя пользователя и отобразить его, затем вы можете взять его оттуда и отправить его как параметр в свой серверный метод.

Если вы не извлекаете его нигде в своем клиенте, а затем берете его из базы данных внутри своего концентратора.

Примечание: прекратите использование глобального статического свойства HttpContext. Внутри концентраторов SignalR у вас есть доступ к Контексту, который вы должны использовать.

Надеюсь, это поможет! Удачи!

+0

В настоящее время я хватаю его из div, который держит полное имя из массива ViewData и передает его на сервер, но я чувствую, что это не лучшая практика. И Context.Identity имеет имя пользователя, которое не является именем, которое я добавил ранее. – Nathan

+0

Если вы используете стандартную аутентификацию учетной записи индивидуального пользователя MVC, то имя пользователя.Identity.Name, которое вы собираетесь получить из любого контекста, будет адресом электронной почты. Что касается HttpContext, никогда не рекомендуется использовать HttpContext внутри любого концентратора. Для доступа к одной и той же информации в концентраторе используйте контекст, который является особым для SignalR. Подумайте об этом так: если ваш клиент не является веб-страницей, а настольным или мобильным приложением, что у вас будет внутри HttpContext? –

+0

Правильно, я согласен с вами, я должен использовать Context vs HttpContext. Однако это не разрешает исходную проблему, требующую захвата разных свойств, отличных от адреса электронной почты и идентификатора. Как и имя, может быть, Last Name, а также, возможно, другие свойства, которые я установил для пользователей. – Nathan