Существует одна причина, по которой наши стандарты кодирования требуют использования аксессуаров (которые также могут быть частными). Если вы быстро захотите узнать, какой код меняет поле, вы просто вызываете иерархию вызовов для сеттера в Eclipse!
Это огромная экономия времени в кодовой базе, которая достигла 2 миллионов строк кода, а также облегчает рефакторинг.
Я не могу говорить напрямую для ASP.NET MVC, но для веб-форм ASP.NET хитрость заключается в создании FormsAuthenticationTicket
и зашифровать его в cookie после аутентификации пользователя. Таким образом, вам нужно только один раз вызвать базу данных (или AD или что-то еще, что вы используете для аутентификации), и каждый последующий запрос будет аутентифицироваться на основе билета, хранящегося в cookie.
Хорошая статья по этому поводу: http://www.ondotnet.com/pub/a/dotnet/2004/02/02/effectiveformsauth.html (неработающая ссылка)
Изменить:
Поскольку ссылка выше не работает, я рекомендовал бы решение LukeP в своем ответе выше: https://stackoverflow.com/a/10524305 - Я бы также предложил изменить принятый ответ на этот. Альтернатива неработающей ссылке: https://web.archive.org/web/20120422011422/http://ondotnet.com/pub/a/dotnet/2004/02/02/effectiveformsauth.html
Вот пример выполнения работы. bool isValid устанавливается при просмотре некоторого хранилища данных (скажем, вашей пользовательской базы данных). UserID - это просто идентификатор, который я поддерживаю. Вы можете добавить дополнительную информацию, такую как адрес электронной почты, в данные пользователя.
protected void btnLogin_Click(object sender, EventArgs e)
{
//Hard Coded for the moment
bool isValid=true;
if (isValid)
{
string userData = String.Empty;
userData = userData + "UserID=" + userID;
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, username, DateTime.Now, DateTime.Now.AddMinutes(30), true, userData);
string encTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
Response.Cookies.Add(faCookie);
//And send the user where they were heading
string redirectUrl = FormsAuthentication.GetRedirectUrl(username, false);
Response.Redirect(redirectUrl);
}
}
в golbal asax добавьте следующий код для получения вашей информации
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
HttpCookie authCookie = Request.Cookies[
FormsAuthentication.FormsCookieName];
if(authCookie != null)
{
//Extract the forms authentication cookie
FormsAuthenticationTicket authTicket =
FormsAuthentication.Decrypt(authCookie.Value);
// Create an Identity object
//CustomIdentity implements System.Web.Security.IIdentity
CustomIdentity id = GetUserIdentity(authTicket.Name);
//CustomPrincipal implements System.Web.Security.IPrincipal
CustomPrincipal newUser = new CustomPrincipal();
Context.User = newUser;
}
}
Когда вы собираетесь использовать информацию позже, вы можете получить доступ к своему настраиваемому принципалу следующим образом.
(CustomPrincipal)this.User
or
(CustomPrincipal)this.Context.User
это позволит вам получить доступ к пользовательской информации.