在VS2013中debugging时的validation问题 – iis express

我试图在Visual Studio 2013中进行debugging时selectWindows用户名。我只是简单地使用:

httpcontext.current.user.identity.name 

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

我的问题是 – 如果我在Visual Studio 2013上运行这个我得到一个空string。

我的网页configuration如下。

  <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> 

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

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

解决scheme是查看Web项目的属性,当您select最高级别的项目时,按F4以获取项目属性。 不要右击项目并select属性,这是完全不同的东西。

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

作品像肉汁:)

当我在研究这个时,我find了我的答案,但无法在互联网上find答案,所以我想编号分享这个:

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

看来,VS2013忽略我的web.config文件,并应用不同的身份validation方法。

我不得不修改这部分文件,看起来像下面。 实际上,我只修改了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> 

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

然后它会工作。 不需要改变别的东西

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

VS 2015改变了这一点。 它添加了一个.vs文件夹到我的web项目和applicationhost.config在那里。 我做了build议的变化(窗口身份validation=真,anon = false),它开始提供一个用户名,而不是一个空白。

打开位于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> 

接下来将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" /> 

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

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

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

Web项目属性

看来正确的答案是由user3149240提供的。 但是,正如Neil Watson所指出的,applicationhost.config文件在这里起作用。

实际上可以在VS Property窗格或文件中进行更改,尽pipe在不同的地方。 在applicationhost.config文件的底部附近是一组位置元素。 IIS Express的每个应用程序似乎都有其中之一。 更改UI中的设置更新文件的这一部分。 所以,你可以通过UI更改设置或者修改这个文件。

这是一个匿名validation和Windowsvalidation的例子:

 <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