在登录我的ASP.Net MVC 4网站后,我需要保留一些关于用户的静态数据。所有东西都挂在Castle Windsor容器中。
登录过程调用一个身份验证服务,该服务返回用户数据,这是稍后在会话中处理和其他服务调用所需的。
我看过这篇文章:MVC Custom Authentication, Authorization, and Roles Implementation。但问题是它在静态类中使用servicelocation,这是有问题的。
如何在这样的设置中存储用户数据以供整个会话使用?
编辑: 我正在使用持久性cookie,所以当用户返回网站时,我需要重新创建我的用户数据。
答案 0 :(得分:3)
在您的LogOn方法中,一旦您授权用户并从数据库中检索了用户详细信息,您就可以将它们存储在会话中:
UserDetail details = ...
Session["user_details"] = details;
以后需要时:
UserDetail details = Session["user_details"] as UserDetail;
作为替代方案,您可以编写一个自定义MembershipProvider,它将从会话中读取此信息(如果存在),如果不存在,它将查询数据库以检索它。
另一种可能性是通过覆盖AuthorizeCore方法来获得自定义Authorize属性,在该方法中,您可以设置包含用户详细信息并从会话中读取的自定义主体。