.Membership.GetUser()用户名; (.net 4,mvc 3)

hor*_*ace 2 .net authentication

我使用简单的.net身份验证将用户登录到.net

if ( Membership.ValidateUser( user, passwd ) )
Run Code Online (Sandbox Code Playgroud)

工作良好.紧接着,我尝试获取用户名:

Membership.GetUser().UserName
Run Code Online (Sandbox Code Playgroud)

有时这会返回一个无效的对象.有时不.我似乎无法检测到哪种模式.

例如,用户使用系统中的有效角色登录为"root"/"password".ValidateUser()调用成功,但Membership.GetUser().UserName返回无效对象.2秒后,再次执行相同的操作,验证和GetUser()都成功.

有任何想法吗?


..编辑1 ..这是我如何使用用户名:

Roles.GetRolesForUser( Membership.GetUser().UserName ); 
Run Code Online (Sandbox Code Playgroud)

当我交换System.Environment.UserName时,角色列表返回空.

如果我保持原样并且使用'true'作为我的第二个参数设置auth cookie,它可以正常工作.

FormsAuthentication.SetAuthCookie( user, true );
Run Code Online (Sandbox Code Playgroud)

如果我使用HttpContext.Current.User.Identity.Name,则角色列表可以将auth cookie设置为true或false.

现在,我理解有关性能的问题.这对我很重要.但我还需要确保应用程序正常运行.

And*_*ewC 6

你为什么不能用

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