如何扩展asp.net User.Identity属性?

时间:2010-07-30 22:34:17

标签: c# asp.net

谈论asp.net会员资格。

对于每个记录的用户,我想从db中缓存一些属性,如状态或朋友请求的数量。

我可以创建自定义类,但我认为扩展现有的User.Identity属性会更好。
像这样:

Label1.Text = User.Identity.Status;

有可能吗?

2 个答案:

答案 0 :(得分:5)

可以通过定义您自己的IIdentity(也可能是IPrincipal)并在为HTTP请求创建IPrincipal时构建它。我相信正确的地方是PostAuthenticateRequest事件被提出。

关于这个其他stackoverflow问题的答案解释了如何做到这一点 - ASP.NET set custom identity or principal(它表示对于MVC但都经历了相同的处理管道)。

答案 1 :(得分:3)

根据您的示例,我相信您应该缓存会话数据中的状态和好友请求数等内容。

使用Identity进行此缓存的可能缺点是,如果我没有弄错,每个请求都会导致创建一个新的Identity实例。因此,对于每个请求,您需要从某个位置重新填充这些标识值,无论是数据库还是已经缓存数据的某个位置。