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

C# 如何扩展asp.net User.Identity属性?,c#,asp.net,C#,Asp.net,我不是在谈论asp.net成员资格 对于每个登录的用户,我希望缓存来自数据库的一些属性,如状态或好友请求数 我可以创建自定义类,但我认为最好扩展现有的User.Identity属性。 大概是这样的: Label1.Text = User.Identity.Status; 这是可能的?可以通过定义自己的(也可能)并在为HTTP请求创建IPrincipal时构造它来实现。我认为正确的做法是在活动开始时进行 另一个stackoverflow问题的答案解释了如何做到这一点(上面说的是MVC,但两者都通

我不是在谈论asp.net成员资格

对于每个登录的用户,我希望缓存来自数据库的一些属性,如状态或好友请求数

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

Label1.Text = User.Identity.Status;

这是可能的?

可以通过定义自己的(也可能)并在为HTTP请求创建
IPrincipal
时构造它来实现。我认为正确的做法是在活动开始时进行


另一个stackoverflow问题的答案解释了如何做到这一点(上面说的是MVC,但两者都通过相同的处理管道)。

基于您的示例,我认为您应该在会话数据中缓存状态和好友请求数等内容


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

感谢您的响应。所以我应该创建自己的类来缓存这些属性?什么是更好的会话或服务器缓存?@Adir,取决于您的要求。当会话到期时,您不再需要缓存的数据,因此它将随着会话自动清理。此外,如果您以web场为目标,会话将在服务器之间迁移(假设您使用的是外部会话状态),并且缓存的数据将在需要时在需要的位置可用。服务器缓存当然可以正常工作,但生存期将独立于会话生存期,其优点是刷新缓存的逻辑非常简单,如果数据不在缓存中,请重新读取它,例如,每10分钟一次。每个请求确实会从FormsAuthentication票证中重建
i原则
i身份
。您可以拥有一个
IIdentity
,该方法只需从一个源(无论是在会话中还是从另一个数据源)检索好友请求的数量,这样,您就不会在实际的身份验证cookie中存储任何该数据。