如何解决重定向循环

时间:2013-04-09 05:51:32

标签: c# asp.net .net

我有一个网络应用程序,并且一些使用Chrome作为首选浏览器的用户在退出应用程序时会收到以下错误,并尝试重新登录。

“此网页有重定向循环”。

我的网络应用程序使用表单身份验证,FormAuthenticationModule将用户重定向回我的应用程序的“登录”页面,因此我无法使用此方法:

<customErrors mode="On" defaultRedirect="~/MyErrorPage.aspx" >

    <error statusCode="401" redirect="~/NoAccess.aspx"/>

</customErrors>

相反,我已将以下内容添加到Page_Load的{​​{1}}事件中。

LoginPage

但是,由于我添加了这种方法,用户似乎得到了“重定向循环”错误。

清除cookie后,一切似乎都很好,但问题确实再次发生。

我可以添加到我的代码中是否有永久性修复,或者我还能做些什么来防止此问题发生?

4 个答案:

答案 0 :(得分:7)

尝试将其添加到web.config文件中:

  <location path="NoAccess.aspx">
    <system.web>
      <authorization>
        <allow users="?"/>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

这将关闭此页面的任何授权,并应停止循环。

你也可以添加:

  <location path="Login.aspx">
    <system.web>
      <authorization>
        <deny users="?"/>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

这将拒绝所有已经过身份验证的用户访问您的登录页面。 将这两者结合起来应该允许您为所有重定向添加自定义错误。

您还可以考虑创建一个用于未经授权访问的目录(例如public/)并放入所有错误页面(不需要授权)。 然后你可以这样做:

  <location path="public">
    <system.web>
      <authorization>
        <allow users="?"/>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

您可以阅读有关位置here的更多信息。 还有关于授权here的更多信息。

答案 1 :(得分:2)

有一个非常类似的问题并在IIS中解决了:在Authentication功能启用Anonymous Authentication并禁用其他所有内容。这是有道理的,因为最终这是管理身份验证逻辑而不是IIS或ASP.NET的应用程序。但很明显,这个解决方案并不像@Grzegorz所建议的那样支持对公共页面的优雅访问。

答案 2 :(得分:1)

我还有一个重定向循环,导致Visual Studio 2013网站的错误消息The request filtering module is configured to deny a request where the query string is too long.,其中身份验证设置为个人用户帐户。

请求的网址是http://localhost:52266/Account/Login?ReturnUrl=%2FAccount%2FLogin%3FReturnUrl%3D%252FAccount%252FLogin%253FReturnUrl....的长版本,因此显然会不断重定向到登录页面并每次都附加返回网址。

尝试查找有问题的循环时没有任何断点似乎有所作为,因为没有一个被触发。

最后我did the following

  • 查找项目属性。通过选择项目(不是解决方案)并查看“属性”窗口(不要右键单击然后选择“属性”,否则将无法找到它)来执行此操作。
  • Anonymous Authentication设为Enabled
  • Windows Authentication设为Disabled

启动项目时,现在应该显示默认页面,并且您添加的断点应该开始工作。

答案 3 :(得分:0)

这是一篇旧帖子,我在自定义身份验证和验证时遇到了这个问题。 通过在web.config

中添加这行代码解决了这个问题
<system.web>
<authentication mode="Forms">
  <forms name=".ASPXFORMSAUTH" path="/" timeout="240" cookieless="UseCookies"></forms>
</authentication>
<authorization>
  <allow users="*"/>
</authorization>
    <compilation debug="true" targetFramework="4.6" />
    <httpRuntime targetFramework="4.6" />
    <httpModules>
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
    </httpModules>
  </system.web> 

希望它有所帮助。