我正在尝试在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>
答案 0 :(得分:213)
我刚从VS 2012升级到VS 2013,当前用户身份(HttpContext.User.Identity)以匿名方式发布。
我尝试更改IIS express applicationhost.config,没有区别。
解决方案是查看Web项目的属性,当您选择项目的顶级时,点击F4以获取项目属性。不要右键单击项目并选择属性,这是完全不同的。
更改要禁用的匿名身份验证并启用Windows身份验证。
像肉汁一样工作:)
答案 1 :(得分:128)
当我研究这个时,我找到了答案,但在互联网上找不到答案,所以我想我会分享这个:
我通过修改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>
答案 2 :(得分:41)
在Visual Studio 2013和VS15中(但我想如果所有其他版本都相同)只需按F4并更改以下两个属性: - 匿名身份验证: 禁用 - Windows身份验证: 启用
答案 3 :(得分:39)
在项目的VS2013 F4中查看属性窗口并禁用匿名访问并启用“Windows身份验证”
然后它会起作用。无需改变任何其他内容
答案 4 :(得分:9)
VS 2015改变了这一点。它在我的web项目中添加了一个.vs文件夹,并且applicationhost.config就在那里。我提出了建议的更改(window authentication = true,anon = false),它开始提供用户名而不是空白。
答案 5 :(得分:8)
打开位于C:\ Users [userid] \ Documents \ IISExpress \ config文件夹中的applicationHost.config文件。在此文件中,将anonymousAthentication的overrideModeDefault和windowsAuthentication更改为“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>
接下来将lockItem更改为AnonymousAuthenticationModule和WindowsAuthenticationModule的“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文件中的内容。
答案 6 :(得分:5)
您还可以修改Web项目的项目属性,选择&#34; Web&#34;从左侧选项卡,然后将服务器下拉菜单更改为&#34;本地IIS&#34;。创建一个新的虚拟目录,并使用IIS管理器根据需要设置您的站点/应用程序池。
我更喜欢这种方法,因为您通常会在本地测试本地IIS v目录(或站点)。您也不会以这种方式影响任何其他网站。
答案 7 :(得分: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
答案 8 :(得分:0)