【问题标题】:HttpContext.User.Identity.Name is returning blankHttpContext.User.Identity.Name 返回空白
【发布时间】:2012-12-18 18:23:53
【问题描述】:

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

代码

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

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

Web.Config

<authentication mode="Windows" />

IIS

我已启用匿名,没有检查任何其他内容。我正在运行 IIS 6.0。

我需要添加任何类型的信息来帮助解决这个问题吗?我很困。我checked this question 但我是否需要设置一个 Cookie 才能使这项工作?

【问题讨论】:

  • HttpContext.User.Identity.Name 是否为空?或者从 GetFileNameWithoutExtension 返回的字符串是空白的?您的身份验证配置是什么样的?
  • 您使用什么身份验证机制?形式?视窗?你检查过 Request.IsAuthenticated 返回 true 了吗?
  • 我更新了问题。我粘贴了以前使用的旧代码。它“确实”起作用了。 IsAuthenticated 返回 false。
  • 取消选中 IIS 中的匿名身份验证,仅启用 Windows 身份验证。这将解决它。
  • 由于某种原因没有工作。

标签: c# asp.net-mvc


【解决方案1】:

我已启用匿名,没有检查任何其他内容。我正在运行 IIS 6.0。

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

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

【讨论】:

  • 出于某种原因,这对我不起作用。也许我错过了什么?
【解决方案2】:

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");
    }
}

【讨论】:

  • 请详细说明。什么不起作用?您是否启用了 Windows 身份验证?在执行操作之前是否提示您输入凭据?如果没有,那么你有一些配置不正确。
  • 您的解决方案没有回答我的问题。它根本不返回任何东西。它是空白的。该页面是空白的,没有任何反应。我很沮丧。
  • @xivo 我愿意提供帮助,但您没有提供足够的信息。返回空白是它应该做的。用户未经过身份验证,因此返回的 Name 是一个空字符串,而您返回的只是那个空字符串。我刚刚更新了我的代码,它将为您提供更多信息。如果您收到“用户未通过身份验证”,那么这肯定会告诉我您的 Windows 身份验证配置不正确。
  • 我觉得这不是一个“问题”,而是我试图做的事情。即使回答了这个问题,我认为它也不会奏效。我愿意放弃这个问题,但感谢您的帮助。我认为我今天对人们来说还不够清楚,所以我想确保将其删除,以免它像一些问题在问这个之前对我所做的那样混淆其他人。再次感谢。
【解决方案3】:

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

这解决了我的问题。

【讨论】:

    【解决方案4】:

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

    <authentication mode="Forms" />
    

    <System.Web>
    

    在 Web.config 文件中。 来自here的解决方案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-23
      • 2017-11-20
      • 1970-01-01
      • 2011-05-27
      • 2012-09-06
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多