3

我试图弄清楚为什么HttpContext.User.Identity.Name返回空白。

代码

public ActionResult Test()
{
    string username = HttpContext.User.Identity.Name;
    return Content(username);         
}

我在错误的上下文中使用它吗?我正在尝试获取用户的用户名。

网络配置

<authentication mode="Windows" />

IIS

我启用了匿名,没有其他检查。我正在运行 IIS 6.0。

我需要添加任何类型的信息来帮助解决这个问题吗?我很困。我检查了这个问题,但我是否需要设置一个 Cookie 才能完成这项工作?

4

4 回答 4

3

我启用了匿名,没有其他检查。我正在运行 IIS 6.0。

这意味着您将不会被提示登录,因此User.Identity.IsAuthenticated将为 false 并且User.Identity.Name为空白。

取消选中匿名身份验证并选中 Windows 身份验证。

于 2012-12-18T18:33:33.680 回答
3

IsAuthenticated 返回 false,因此 Identity.Name 返回空字符串,因为您不需要对该操作进行身份验证。您必须启用 Windows 身份验证并要求对操作进行身份验证。尝试通过使用属性装饰用户来要求用户被授权执行该操作[Authorize]- 这将启动身份验证协商。

[Authorize]
public ActionResult Test()
{
    if(Request.IsAuthenticated)
    {
        string username = HttpContext.User.Identity.Name;
        return Content(username);         
    }
    else 
    {
        return Content("User is not authenticated");
    }
}
于 2012-12-18T18:35:55.620 回答
2

如果其他人遇到此问题,请验证“加载用户配置文件”选项是否设置为true。转到 IIS 应用程序池。从列表中选择您的应用程序池。单击高级设置并向下滚动到流程模型部分。

这解决了我的问题。

于 2014-05-22T02:56:44.653 回答
0

如果您使用 FormsAuthentication.SetAuthCookie 那么您需要添加

<authentication mode="Forms" />

<System.Web>

在 Web.config 文件中。从这里解决

于 2015-06-13T16:48:01.797 回答