C# 如何创建自定义BaseController以在用户登录时保留有关用户的数据
我在我的应用程序中使用C# 如何创建自定义BaseController以在用户登录时保留有关用户的数据,c#,asp.net-mvc,asp.net-mvc-4,simplemembership,C#,Asp.net Mvc,Asp.net Mvc 4,Simplemembership,我在我的应用程序中使用SimpleMembership,当我需要获取当前用户的userId时,我使用WebSecurity.CurrentUserId,但这会调用数据库,我需要减少对数据库的调用 这就是为什么我想在这里创建BaseController:Controller来存储userId。实现这一点的最佳方式是什么 我可以创建: public class BaseController : Controller { public int CurrentUserId { get; set
SimpleMembership
,当我需要获取当前用户的userId
时,我使用WebSecurity.CurrentUserId
,但这会调用数据库,我需要减少对数据库的调用
这就是为什么我想在这里创建BaseController:Controller
来存储userId
。实现这一点的最佳方式是什么
我可以创建:
public class BaseController : Controller
{
public int CurrentUserId { get; set; }
...
登录后设置此值。但我确信这不应该如此简单。将HttpContext上的用户属性设置为登录用户。像这样(从我的CustomPrincipal实现中提取) 在您的Global.asax中:
protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
{
/// Code to get user
...
ContextHelper.GetHttpContextBase().User = user;
}
在另一个助手类中:
public static class ContextHelper
{
public static HttpContextBase GetHttpContextBase()
{
return new HttpContextWrapper(HttpContext.Current);
}
}
然后在BaseController中:
public abstract class BaseController : Controller
{
public new HttpContextBase HttpContext { get; private set; }
protected virtual new ICustomPrincipal User
{
get { return HttpContext.User as ICustomPrincipal; }
}
}
我将使用声明来存储用户ID。这将在cookie中保留信息,并消除每次需要访问数据库时访问数据库的需要。这是一个例子。本文特别将用户ID放在声明中
ICustomPrincipal
是什么<代码>ContextHelper.GetHttpContextBase().user=user代码>用户可以是我的类,对吗?如上所述,ICustomPrincipal是我的实现。如果您的用户属于不同的类型,您显然需要更改该类型。关键是,您应该将当前登录的用户设置为HttpContext的user属性。