如何UserId
在不使用Membership.GetUser(username)
ASP.NET Web应用程序项目的情况下访问ASP.NET成员资格?
可以UserId
包含在()Profile
旁边的命名空间中吗?UserName
System.Web.Profile.ProfileBase
试试这个:
MembershipUser CurrentUser = Membership.GetUser(User.Identity.Name); Response.Write("CurrentUser ID :: " + CurrentUser.ProviderUserKey);
您是否有理由在每次需要UserId时保存数据库调用?如果是这样,当我使用ASP.NET MembershipProvider时,我通常会做一个允许我缓存该调用的自定义提供程序,或者我可以缓存的实用程序方法.
如果你想把它放在Profile中,我没有太多理由这样做,特别是因为它仍然需要数据库调用,除非你在那里使用自定义配置文件提供程序,它还有额外的处理解析出UserId.
如果你想知道他们为什么不实行GetUserId方法,它只是因为你并不总是保证该用户ID将是一个GUID作为包括供应商.
编辑:
请参阅ScottGu关于提供程序的文章,该文章提供了下载SqlMembershipProvider的实际源代码的链接.
但要做到真正的最简单的事情是GetUserId()方法在用户对象,或实用类,你来自哪里,缓存/会话,如果有获取用户标识,否则访问数据库,通过用户名(或存储在会话)的缓存它,并返回它.
更多需要考虑的事项(但由于cookie大小限制而要非常小心):表单身份验证:成员身份,角色和配置文件,没有提供者和没有会话