User.Identity.Name是否会生成与Membership.GetUser().UserName相同的数据

RWe*_*ndi -3 asp.net asp.net-mvc asp.net-mvc-3

根据我的问题.这会为匿名用户生成相同的用户名吗?

编辑:抱歉这个令人困惑的问题.我想要找出的是,如果User.Identity.Name是获取当前登录用户的用户名的可靠方法.试图避免使用Membership.GetUser().用户名为GetUser()可能会为匿名用户返回null.

Eri*_*ips 5

我不确定Generate是最好的词.我假设你的意思是返回相同的数据.

答案并不总是如此.

User.Identity是一个IIdentity实例(通常是GenericIdentityWindowsIdentity).

Membership.Getuser()将返回MembershipUser的实例.

这两种机制都可以定制,技术上可以返回完全不同的信息.

已更新为编辑

首先,这个问题开始听起来像一个XY问题.我强烈建议您告诉我们您实际想要解决的问题.

虽然Membership.GetUser()应该为匿名用户返回null,但User.Identity.Name通常返回string.Empty匿名用户,这在技术上也是正确的.

通常推荐的方法是执行以下操作:(直接从ASP.Net MVC 3模板启动器中获取)

@if(Request.IsAuthenticated) 
{
  <text>Welcome <b>@Context.User.Identity.Name</b>!
  [ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text>
}
else 
{
  @:[ @Html.ActionLink("Log On", "LogOn", "Account") ]
}
Run Code Online (Sandbox Code Playgroud)