4

我有一个在 4.0 框架上运行的 ASP.NET Web 窗体应用程序项目。我对 Web 应用程序非常熟悉,但对 Web 窗体应用程序不太熟悉。我今天遇到了他们两个之间的显着差异,我对为什么存在这种差异感到困惑。

通常,在 Web 应用程序中,如果我想确定页面的当前用户是谁,那么我只需从User.Identity.Name检索他们的域登录信息。因此,当我按 F5 在调试环境中运行我的解决方案(我的 Web窗体应用程序!)并发现 User.Identity.Name 为空时,我感到非常困惑。因此,我随后在 Google 上搜索“User.Identity.Name 为空”,然后遇到一堵链接墙,这些链接大多都是针对在 IIS 中未禁用匿名身份验证时遇到此问题的人。当然,这不是我的问题(我认为),因为我只是在这里从 Visual Studio 2012 调试。

但是,我继续挖掘,最终在HttpContext上发现了一些不起眼的属性,它不为空,返回用户的域登录。该属性是HttpContext.Current.Request.LogonUserIdentity.Name。这让我想到了我的问题......

问题:在我的 Web 表单应用程序中,为什么 User.Identity.Name 为空,但 HttpContext.Current.Request.LogonUserIdentity.Name 不是?

在此先感谢您的帮助!

编辑:忘记说明我在 web.config 中的内容(因为我确信如果我不这样做,它会被要求!)。

<system.web>
  <customErrors mode="Off" />
  <compilation debug="true" targetFramework="4.0" />
  <authentication mode="Windows"/>
</system.web>
<system.webServer>
    <httpProtocol>
      <customHeaders>
        <clear />
        <add name="X-UA-Compatible" value="IE=10,chrome=1; IE=9,chrome=1; IE=8,chrome=1; IE=edge,chrome=1" />
      </customHeaders>
    </httpProtocol>
    <modules runAllManagedModulesForAllRequests="true" />
    <defaultDocument>
      <files>
        <add value="Home.aspx" />
      </files>
    </defaultDocument>
  </system.webServer>

除了 EntityFramework 的标签之外,这几乎就是我的 web.config 中的所有内容。

4

1 回答 1

5

我自己找到了答案。IIS Express 的 applicationhost.config 设置为不允许 Windows 身份验证。我只是设置了 enabled="true" 然后 User.Identity 不再为空。

<windowsAuthentication enabled="true">
  <providers>
    <add value="Negotiate" />
    <add value="NTLM" />
  </providers>
</windowsAuthentication>

编辑:
1)我对缺乏信息表示歉意。实际上,我在原始答案中修改了 XML 标记,但我显然忘记通过单击代码示例按钮将它们标记为代码,因此 XML 标记从未显示!它们现在应该是可见的。

2) 我修改的 applicationhost.config 的位置在我的文档下的几个文件夹中。确切位置是:C:\Users[您的用户]\My Documents\IISExpress\config

于 2013-10-30T17:06:00.700 回答