相关疑难解决方法(0)

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

如果有以下内容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 …

asp.net forms-authentication asp.net-4.0

5
推荐指数
1
解决办法
3275
查看次数