103

在 Visual Studio 2013 中调试时,我试图获取 Windows 用户名。我只是在使用:

httpcontext.current.user.identity.name

如果我在我的开发服务器上运行它可以正常工作,如果我在任何以前版本的 Visual Studio 上以调试模式运行它也可以正常工作。

我的问题是 - 如果我在 Visual Studio 2013 上运行它,我会得到一个空字符串。

我的网络配置如下。

<system.web>
    <authentication mode="Windows"/>
    <identity impersonate="false"/>
    <authorization>
       <allow users="*"/>
    </authorization>
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.0"/>
    <customErrors mode="Off"/>
</system.web>
4

9 回答 9

216

我刚刚从 VS 2012 升级到 VS 2013,当前的用户身份 (HttpContext.User.Identity) 是匿名的。

我尝试更改 IIS express applicationhost.config,没有区别。

解决方案是查看 Web 项目的属性,当您选择项目的顶层时,按 F4 以获取项目属性。不要右键单击项目并选择属性,这是完全不同的东西。

将匿名身份验证更改为禁用,并将 Windows 身份验证更改为启用。

像肉汁一样工作:)

于 2013-12-31T11:58:27.027 回答
130

当我研究这个时,我找到了答案,但在互联网上找不到答案,所以我想我会分享这个:

我通过修改我的 applicationhost.config 文件解决了我的问题。我的文件保存在“\My Documents\IISExpress\config”文件夹中。

似乎 VS2013 忽略了我的 web.config 文件并应用了不同的身份验证方法。

我不得不修改文件的这一部分,如下所示。其实我只是将anonymousAuthentication修改为false,windowsAuthentication模式修改为true。

<authentication>

  <anonymousAuthentication enabled="false" userName="" />

  <basicAuthentication enabled="false" />

  <clientCertificateMappingAuthentication enabled="false" />

  <digestAuthentication enabled="false" />

  <iisClientCertificateMappingAuthentication enabled="false">
  </iisClientCertificateMappingAuthentication>

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

</authentication>
于 2013-10-22T10:54:46.457 回答
41

在 Visual Studio 2013 和 VS15 中(但我猜如果所有其他版本都相同)只需按 F4 并更改这两个属性: -匿名身份验证: 禁用 - Windows 身份验证: 启用

于 2014-02-17T19:04:31.977 回答
38

在项目的 VS2013 F4 中查看属性窗口并禁用匿名访问并启用“Windows 身份验证”

然后它将起作用。无需更改任何其他内容

于 2013-12-11T13:28:56.673 回答
9

VS 2015 改变了这一点。它在我的 Web 项目中添加了一个 .vs 文件夹,并且 applicationhost.config 就在其中。我进行了建议的更改(窗口身份验证 = true,anon = false),它开始提供用户名而不是空白。

于 2015-09-02T19:43:50.140 回答
8

打开位于 C:\Users[userid]\Documents\IISExpress\config 文件夹中的 applicationHost.config 文件。在此文件中,将 anonymousAthentication 和 windowsAuthentication 的 overrideModeDefault 更改为“Allow”

 <sectionGroup name="security">
                <section name="access" overrideModeDefault="Deny" />
                <section name="applicationDependencies" overrideModeDefault="Deny" />
                <sectionGroup name="authentication">
                    <section name="anonymousAuthentication" overrideModeDefault="Allow" />
                    <section name="basicAuthentication" overrideModeDefault="Deny" />
                    <section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" />
                    <section name="digestAuthentication" overrideModeDefault="Deny" />
                    <section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" />
                    <section name="windowsAuthentication" overrideModeDefault="Allow" />
                </sectionGroup>

接下来将 AnonymousAuthenticationModule 和 WindowsAuthenticationModule 的 lockItem 更改为“false”

  <system.webServer>
            <modules>
                <!--
                <add name="HttpCacheModule" lockItem="true" />
-->
                <add name="DynamicCompressionModule" lockItem="true" />
                <add name="StaticCompressionModule" lockItem="true" />
                <add name="DefaultDocumentModule" lockItem="true" />
                <add name="DirectoryListingModule" lockItem="true" />
                <add name="IsapiFilterModule" lockItem="true" />
                <add name="ProtocolSupportModule" lockItem="true" />
                <add name="HttpRedirectionModule" lockItem="true" />
                <add name="ServerSideIncludeModule" lockItem="true" />
                <add name="StaticFileModule" lockItem="true" />
                <add name="AnonymousAuthenticationModule" lockItem="false" />
                <add name="CertificateMappingAuthenticationModule" lockItem="true" />
                <add name="UrlAuthorizationModule" lockItem="true" />
                <add name="BasicAuthenticationModule" lockItem="true" />
                <add name="WindowsAuthenticationModule" lockItem="false" />

进行这些更改将允许现有的 Web 配置设置覆盖 IIS Express 的 applicationHost 文件中的内容。

于 2013-10-22T13:43:22.890 回答
6

您还可以修改 Web 项目的项目属性,从左侧选项卡中选择“Web”,然后将“服务器”下拉菜单更改为“本地 IIS”。创建一个新的虚拟目录并使用 IIS 管理器根据需要设置您的站点/应用程序池。

我更喜欢这种方法,因为您通常会有一个本地 IIS v 目录(或站点)来进行本地测试。您也不会以这种方式影响任何其他网站。

Web 项目属性

于 2014-03-31T23:34:45.343 回答
1

上面的user3149240似乎提供了正确的答案。然而,正如 Neil Watson 指出的那样,applicationhost.config 文件在这里发挥了作用。

更改实际上可以在 VS 属性窗格或文件中进行,尽管在不同的位置。靠近 applicationhost.config 文件底部的是一组位置元素。IIS Express 的每个应用程序似乎都有其中之一。更改 UI 中的设置会更新文件的这一部分。因此,您可以通过 UI 更改设置或修改此文件。

这是一个关闭匿名身份验证和打开 Windows 身份验证的示例:

<location path="MyApp">
    <system.webServer>
        <security>
            <authentication>
                <windowsAuthentication enabled="true" />
                <anonymousAuthentication enabled="false" />
            </authentication>
        </security>
    </system.webServer>
</location>

这在 VS UI 中等同于:

Anonymous Authentication: Disabled
Windows Authentication: Enabled
于 2015-04-01T18:16:25.540 回答
1

F4 并不总是把我带到这个小组。此外,人们常说一张图抵得上一千个字。

在此处输入图像描述

于 2019-02-18T16:12:06.423 回答