У меня был тот же вопрос, когда я реализовал пользовательский поставщик членства для MVC.В итоге я сделал две вещи.Я храню идентификатор пользователя в поле ProviderUserKey
объекта MembershipUser
.См. provideruserkey .Затем, чтобы ответить на ваш вопрос, да, я создал пользовательский принципал из System.Web.Security.IPrincipal, хотя позже я унаследовал от System.Web.Security.RolePrincipal
, поскольку мне требовалась поддержка ролей.
public class MyPrincipal : RolePrincipal
{
public Guid Id { get; set; }
public MyPrincipal(string providerName, IIdentity identity, Guid id) : base(identity)
{
Id = id;
}
}
Обновление: Причина, по которой я не хотел использовать сессию в моем случае, заключается в том, что я отключил его для приложения.Я читал, что основная концепция MVC - это разделение интересов, и это близко моделирует работу сети, которая не имеет состояния.Хотя я не могу вспомнить, где я читал это сейчас, когда я пытаюсь запомнить.Однако я также помню, что читал, что если вы можете устранить сеанс, вы должны это сделать.Это позволит IIS обслуживать одновременные запросы от вашего приложения, а не ждать, пока один запрос завершится (и завершит сеанс пользователя), прежде чем следующий запрос сможет использовать сеанс и отправить свой ответ.Самое большое влияние на это - загрузка содержимого страницы с помощью Ajax.