如何在不使用Membership.GetUser()的情况下访问ASP.NET成员身份中的UserId?

GrZ*_*eCh 17 membership asp.net asp.net-membership

如何UserId在不使用Membership.GetUser(username)ASP.NET Web应用程序项目的情况下访问ASP.NET成员资格?

可以UserId包含在()Profile旁边的命名空间中吗?UserNameSystem.Web.Profile.ProfileBase

小智 23

试试这个:

MembershipUser CurrentUser = Membership.GetUser(User.Identity.Name);
Response.Write("CurrentUser ID :: " + CurrentUser.ProviderUserKey);
Run Code Online (Sandbox Code Playgroud)


Ted*_*Ted 13

您是否有理由在每次需要UserId时保存数据库调用?如果是这样,当我使用ASP.NET MembershipProvider时,我通常会做一个允许我缓存该调用的自定义提供程序,或者我可以缓存的实用程序方法.

如果你想把它放在Profile中,我没有太多理由这样做,特别是因为它仍然需要数据库调用,除非你在那里使用自定义配置文件提供程序,它还有额外的处理解析出UserId.

如果你想知道他们为什么不实行GetUserId方法,它只是因为你并不总是保证该用户ID将是一个GUID作为包括供应商.

编辑:

请参阅ScottGu关于提供程序的文章,文章提供了下载SqlMembershipProvider的实际源代码链接.

但要做到真正的最简单的事情是GetUserId()方法在用户对象,或实用类,你来自哪里,缓存/会话,如果有获取用户标识,否则访问数据库,通过用户名(或存储在会话)的缓存它,并返回它.

更多需要考虑的事项(但由于cookie大小限制而要非常小心):表单身份验证:成员身份,角色和配置文件,没有提供者和没有会话


GrZ*_*eCh 4

我决定自己编写用户用户的身份验证(非常简单但有效),我很久以前就应该这样做。

我最初的问题是关于 UserId 的,它无法从以下位置获得:

System.Web.HttpContext.Current.User.Identity.Name
Run Code Online (Sandbox Code Playgroud)