【问题标题】:HttpContext.Current.User.Identity.Name is EmptyHttpContext.Current.User.Identity.Name 为空
【发布时间】:2025-11-21 03:55:03
【问题描述】:

我有一个 Silverlight 应用程序(使用 MVC),当我在 Visual Studio 中构建时,使用 Visual Studio 开发中心,没有问题,HttpContext.Current.User.Identity.Name 有一个值

但是当我使用 IIS 7.5 的同一个项目(我使用的是 Windows 7)时,HttpContext.Current.User.Identity.Name 保持为空

谁能帮忙?或者知道在哪里可以找到 Visual Studio 开发中心的设置,以便检查 IIS 中的问题?

【问题讨论】:

  • 检查您的身份验证设置。 HttpContext.Current.User 是包装当前用户的 IPrincipal - 无论是 Windows 用户、.NET Forms 安全主体、Passport 主体还是您自己项目中的自定义用户主体。我怀疑 IIS7 允许匿名身份验证,而无论出于何种原因,Visual Studio 都以经过身份验证的用户身份运行。 Visual Studio 中返回的 .Name 值是什么,您的 IIS 站点上的身份验证设置是什么?
  • .Name 在 Visual Studio 中返回“lapjordy\\Jordy”(我的 Windows 登录名)。在 IIS 中的名称返回“”(空字符串)我在 IIS 中关闭匿名身份验证并打开 Windows 身份验证,但随后浏览器要求我给我我的 Windows 凭据。我唯一想要的是应用程序(silverlight)给我当前 Windows 用户的名称(没有浏览器要求我的用户名 --> 参见图片)

标签: visual-studio iis httpcontext


【解决方案1】:

过去几天我一直在努力解决这个问题。

我建议阅读 Scott Guthrie 的博文Recipe: Enabling Windows Authentication within an Intranet ASP.NET Web application

对我来说,问题是虽然我在 IIS 中启用了 Windows 身份验证,并且我在 web.config 的 <system.web> 部分中有 <authentication mode="Windows" />,但我并没有阻止匿名访问。最后一部分是关键。 您需要阻止匿名访问以确保浏览器发送凭据。

您可以在控制面板中配置 IIS,以便您的站点(或机器)使用 Windows 身份验证并拒绝匿名访问,或者您可以在 system.web 部分的 web.config 中添加以下内容:

<authentication mode="Windows" />

<authorization>
   <deny users="?"/>
</authorization>

【讨论】:

  • 为我工作虽然我的 Identity.Name 只是间歇性地空白,从一秒到一秒。不知道为什么,如果有人能解释一下,会有兴趣吗?
  • 如果我在 web.config 中设置了这个,我不能再访问页面了,说未经授权,使用 Visual Studio
  • 您是使用 Active Directory 的家庭网络还是工作网络?我认为它仅适用于 Active Directory(域)。在我的家庭网络上,使用相同的配置,我也会收到未经授权的错误。
【解决方案2】:

这些可能会解决问题(它对我有用)。在 IIS Express 中更改项目属性值,“匿名身份验证”和“Windows 身份验证”。为此,在选择项目时,按 F4,然后更改这些属性。

如果您将其部署在本地 IIS 上,请确保启用本地计算机的“Windows 身份验证”功能并禁用“匿名身份验证”。

参考

https://grekai.wordpress.com/2011/03/31/httpcontext-current-user-identity-name-is-empty/

【讨论】:

  • 强调“项目被选中,按F4”。那是为我做的。奇怪的是,这不在其他项目属性屏幕中。
  • 你救了我的一天。
【解决方案3】:

除了“Bryan Bedard 于 2011 年 3 月 28 日 12:27 回答”

如果解决方案不起作用,您必须在 iss manager 中启用 Windows 身份验证。 如何做到这一点:

1.从运行对话框启动 IIS 管理器: 在开始菜单上,单击所有程序,单击附件,然后单击运行。 在“打开”框中,键入 inetmgr,然后单击“确定”。

2.在“连接”窗格中,展开服务器名称,展开站点,然后转到层次结构窗格中要配置的级别,然后单击网站或 Web 应用程序。 3. 滚动到主页窗格中的 IIS 部分,然后双击身份验证。

4.在身份验证窗格中,选择匿名身份验证,然后单击禁用。

  1. 在“身份验证”窗格中,选择“Windows 身份验证”,然后单击“启用”。

Reference

【讨论】:

  • 另外,如果您得到 500.19,您可以尝试编辑 applicationHost.config。 ctrl+f windowsAuthentication 并确保overrideModeDefault="Allow"。您可能需要对 anonymousAuthentiction 执行相同的操作,Here 是来自 Microsoft 的更多信息。
【解决方案4】:

禁用 iis 身份验证选项卡中的所有其他选项(Windows 身份验证除外)解决了我的问题。 请检查..

步骤:

  1. 在您的机器中打开 iis
  2. 从应用程序池中选择您的应用程序
  3. 点击身份验证选项
  4. 禁用除 windows 身份验证以外的所有其他选项(应禁用匿名身份验证)

请检查并告诉我反馈。它对我有用。希望它也对你有用..

【讨论】:

    【解决方案5】:

    我最近也遇到了这个问题。使用新客户端,尝试通过使用 Windows 身份验证的 IISExpress 从 Visual Studio 运行旧的 Web 表单应用程序。 对我来说,web.config 配置正确

    但是,IISExpress.config 设置文件有:

    <windowsAuthentication enabled="false">
    

    开发人员登录的用户帐户非常新,因此不太可能被编辑过。 结果很简单,把它改成 enabled=true 就可以正常运行了。

    【讨论】:

    • 这是我正在寻找的答案。不过,我的 IISExpress 设置存储在文件 applicationhost.config 中。
    【解决方案6】:

    另外,特别是如果您是开发人员,请确保您实际上连接到 IIS 服务器,而不是连接到 Visual Studio 附带的 IIS Express。如果您正在调试一个项目,有时甚至认为您已连接到 IIS 也很容易,而实际上您并没有。

    即使您在 IIS 上启用了 Windows 身份验证并禁用了匿名身份验证,这也不会对您的 Visual Studio 模拟产生任何影响。

    【讨论】:

      【解决方案7】:

      仅当 IIS 服务器位于同一域中并且您的组策略中的安全设置允许时,浏览器才会检测您的用户名。

      否则您将不得不向它提供凭据,但如果它不在同一个域中,它将无法对您进行身份验证。

      【讨论】:

      • 如何将 IIS 服务器和浏览器(或应用程序?)放在同一个域中?我是否需要设置这些组策略?你有一个例子吗?希望你能帮忙! :)
      【解决方案8】:

      除了前面提到的所有明显原因之外,可能还有另一个原因:您没有像这样在控制器顶部放置 Authorize 属性:

      [Authorize(Roles = "myRole")]
      [EnableCors(origins: "http://localhost:8080", headers: "*", methods: "*", SupportsCredentials = true)]
      public class MyController : ApiController
      

      至少这对我有用。

      【讨论】:

        【解决方案9】:

        正如@PaulTheCyclist 所说,如果默认启用 IISExpress 匿名身份验证,则会禁用 Windows 身份验证。

        这可以在我确定以前称为 PropertyPages 的内容中进行更改(不是右键单击 -> 属性)。选择网络项目

        【讨论】:

          【解决方案10】:

          尝试在 IIS 中启用基本身份验证并禁用其他身份验证,然后尝试启动应用程序。该应用程序将要求提供 Windows 凭据。输入相同的,应用程序应该能够获取 HttpContext.Current.User.Identity.Name 下的名称。

          【讨论】:

            【解决方案11】:

            我在创建项目时未设置身份验证模式时遇到了这个问题。 因此,在初始设置中将身份验证设置为 windows 模式创建新项目时,它可以工作。

            【讨论】: