Доступ к пользовательскому свойству из IdentityUser в ValuesController без расширения - веб-API - PullRequest
0 голосов
/ 06 февраля 2019

Я следовал из следующего ответа здесь: Как расширить IdentityUser с помощью пользовательского свойства

Мои переменные, которые я добавил (следуя приведенному выше ответу):

int numberID
string fullName

Это построено на веб-приложении ASP.net по умолчанию Visual Studio 2017, выбранном с параметрами Web API и Аутентификация отдельных учетных записей пользователей.

Сейчас я пытаюсь прочитать текущее значение как numberID, так и fullName изтекущий пользователь внутри ValuesController проекта.

Я пытался сделать

var currentUser = System.Web.HttpContext.Current.User.Identity.GetUserId();
var currentnumberID = currentUser.numberID;

Но у меня нет успеха с последней строкой кода.

У меня также естьиспользовал User.Identity.GetUserName () и интересовался, есть ли способ получить доступ к моим новым переменным БЕЗ создания расширения идентификации пользователя?

ИЛИ

Еще лучше, с моим приложением Web API, чтоэто лучший способ добавить дополнительные переменные / поля для пользователя.Т.е. я хотел бы добавить как fullName, так и numberID, связанные с каждым пользователем, и иметь возможность доступа к ним в моих контроллерах Web API (например, вызвать текущего пользователя и перечислить переменные, связанные с текущим пользователем).Я начинаю думать, что я пошел по неверному пути, пытаясь использовать UserIdentity.

EDIT Закончился прикус пули и следование очень простому подходу: Как получить CustomЗначение свойства ApplicationUser в ASP.Net MVC 5 Вид? добавления расширения Identity пользователя.Предыдущие ответы казались сложными, но этот ответ был прост и работает!

1 Ответ

0 голосов
/ 06 февраля 2019

Проблема в том, что вы читаете UserId и рассматриваете его как User объект.

Вам нужно использовать UserManager, чтобы получить пользовательский User объект.Внутри метода действия контроллера у вас есть доступ к UserManager, так что вы можете просто использовать его:

var currentUser = UserManager.FindById(User.Identity.GetUserId());

Если вы не находитесь внутри метода действия контроллера, то вам нужно получить UserManager из HttpContext:

var UserManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
...