Получить идентификатор текущего пользователя ASP.NET

Как вы, ребята, можете получить идентификатор текущего пользователя с помощью поставщика членства ASP.NET? Мое приложение представляет собой MVC 3 с использованием подхода Database First, поэтому я создал свою собственную базу данных, а Поставщик провайдера и поставщика членства используют мои таблицы (Пользовательский членство и поставщик роли).

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

Но так как членство ASP.NET - это IIdentity, единственное, что я могу получить, это Name. Я не хочу создавать ссылку между двумя таблицами, используя имя, я хочу ID!

Итак, что вы делаете в своем приложении для этой ОЧЕНЬ простой задачи? Я имею в виду, что почти на каждой странице, где подключенному пользователю нужно вставить значение, нам нужен идентификатор пользователя для создания правильного внешнего ключа в таблице пользователя, правильно? Кстати, я очень новичок в этой структуре MVC, до этого я использовал ASPX aspx и для информации о пользователе, я использовал Session, который дал мне текущие ID, Name и другие поля по мере необходимости. Поскольку эта реализация с использованием объекта Session дала мне проблемы с совместным хостингом, я хочу использовать реальное членство.

Спасибо!

ИЗМЕНИТЬ

Идентификатор, который я хочу, должен быть целым (на самом деле, я хочу, чтобы поле UserID находилось в таблице User).

Ответ 1

Попробуйте это;

MembershipUser mu = Membership.GetUser("username");
string userId = mu.ProviderUserKey.ToString();

Для текущего пользователя, которого вы могли использовать, не передавая имя пользователя;

string userId = Membership.GetUser().ProviderUserKey.ToString();

Ответ 2

Я хотел поделиться, как получить UserId для Identity 2.0:

string UserId = System.Web.HttpContext.Current.User.Identity.GetUserId();

Ответ 3

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

Ответ 4

Предполагая, что у вас все правильно настроено для вашего провайдера в вашем web.config, и поскольку вы можете получить имя пользователя, я рекомендую:

Dim muser As MembershipUser = Membership.GetUser(userName)

Подробнее о объекте MembershipUser: http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28SYSTEM.WEB.SECURITY.MEMBERSHIPUSER%29;k%28TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29;k%28DevLang-VB%29&rd=true

доступно много свойств, кроме имени. ID feild, который вы хотите, называется 'ProviderUserKey'

Ответ 5

Может ли это быть вашим после?

userid от аутентификации членства asp.net?

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

Привет

Ответ 6

Чтобы получить текущий UserID, вы можете попробовать следующее

string currentUserId= Convert.ToString(Membership.GetUser().ProviderUserKey);