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

时间:2013-05-06 04:34:45

标签: asp.net asp.net-mvc asp.net-mvc-3

根据我的问题。这会为匿名用户和登录用户生成相同的用户名吗?

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

1 个答案:

答案 0 :(得分:5)

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

答案是并不总是

User.IdentityIIdentity个实例(通常是GenericIdentityWindowsIdentity)。

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

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

已更新以进行修改

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

虽然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") ]
}