ASP.NET 2.0和4.0似乎在Forms身份验证中以不同方式处理根URL

Kev*_*Kev 5 asp.net forms-authentication asp.net-4.0

如果有以下内容web.config:

<configuration>
  <system.web>
    <authentication mode="Forms">
      <forms name="MembershipCookie" 
             loginUrl="Login.aspx" 
             protection="All" 
             timeout="525600" 
             slidingExpiration="true" 
             enableCrossAppRedirects="true" 
             path="/" />
    </authentication>
    <authorization>
      <deny users="?"  />
    </authorization>
  </system.web>
  <location path="Default.aspx">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
</configuration>
Run Code Online (Sandbox Code Playgroud)

该应用程序是在Windows 2008R2/IIS7.5上运行的ASP.NET 2.0应用程序.

如果站点的应用程序池配置为运行ASP.NET 2.0并且我浏览到,http://example.comDefault.aspx按照您对上述规则的期望进行渲染.

但是,如果应用程序池设置为运行ASP.NET 4.0,则会将其重定向到登录页面.如果我明确指定http://example.com/default.aspx那么一切都很好并default.aspx呈现.

我尝试过重写/ -> /default.aspx(使用IIS UrlRewriter 2.0)但结果仍然相同,我被踢到了登录页面.

我也尝试使用具有相同结果的ASP.NET 4.0应用程序(这是问题最初出现的地方).我有一个2.0应用程序尝试这样做的原因是为了看看是否有行为上的变化,似乎/ 在4.0的处理方式不同.

总而言之,使用上面的配置可以观察到以下情况:

ASP.NET Version  Url                                 Behaviour
-------------------------------------------------------------------------
2.0              http://example.com                  Renders Default.aspx
2.0              http://example.com/Default.aspx     Renders Default.aspx
4.0              http://example.com                  Redirects to Login.aspx
4.0              http://example.com/Default.aspx     Renders Default.aspx

这是一个错误/突破性变化还是我错过了一些明显的错误?

更新:

我已经到了这个问题的底部,请看下面我自己的答案.

Kev*_*Kev 4

找到了罪魁祸首。作为我们的 WebDeploy 2.0/WebMatrix 服务器端更改的一部分,WebMatrix 服务器验证程序建议使用此修补程序:

MS KB:980368 - 提供了一个更新,使某些 IIS 7.0 或 IIS 7.5 处理程序能够处理 URL 不以句点结尾的请求

安装此修补程序会导致 ASP.NET 4.0 更改仅请求 url 的域名部分的表单身份验证行为。

更新1:

此 QFE 也是 Windows 2008R2 SP1 的一部分,并且还会以上述方式破坏 ASP.NET 4.0 的表单身份验证。

更新2:

此外,在配置为以 ASP.NET 和经典管道模式运行的应用程序池中运行经典 ASP 应用程序时,这也会破坏默认文档处理。

服务器返回404.2 - Not Found错误。

同样的重大更改也适用于 Windows 2008R2 SP1。

更新3:

我向 MS PSS 报告了这一情况,他们确认了行为的重大变化。他们创建了这篇知识库文章来回应我们(可能还有其他人)受到的影响:

由于无扩展 URL 处理程序,Web 服务可能会在带有 .NET Framework 4.0 的 Microsoft Internet Information Services (IIS) 7.5 和 Windows 7 Service Pack 1 上失败

就我自己而言,如果受到此问题的影响,我基本上会删除(或建议客户)无扩展处理程序:

<configuration>
  <system.webServer>
    <handlers>
      <remove name="ExtensionlessUrl-Integrated-4.0" />
      <remove name="ExtensionlessUrl-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrl-ISAPI-4.0_32bit" />
    </handlers>
  </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)