6

我有一个陷入无限循环的 Web 应用程序,我不知道下一步该往哪里看。这是一个 Intranet 站点,所以没有可以分享的链接,但我在下面列出了我能想到的尽可能多的详细信息。我将不胜感激任何想法或建议。谁都有。

细节:

  • IIS 7
  • .Net 4.0
  • 视窗 2008
  • 默认文件是 Login.aspx
  • IIS 中的应用程序或 Login.aspx 上未设置 HTTP 重定向
  • Fiddler 使用状态码 302 显示 Login.aspx 并重定向到 Login.aspx

如果我打开我的网站,它会指向 Login.aspx 并陷入 302 循环。如果我打开站点但指向 register.aspx,Fiddler 会显示 register.aspx 转到 Login.aspx,这当然会重定向到 Login.aspx。

我做了什么:

  • 从 Visual Studio 运行 webapp——一切正常
  • 检查 web.config 中的重定向命令——没有
  • 检查 IIS 是否有重定向命令——没有
  • 在 Fiddler 中查看循环中的另一个页面——没有,只有 Login.aspx 到 Login.aspx
  • 检查 Login.aspx 的重定向命令——没有
  • 检查 Login.aspx 代码后面的重定向命令——没有
  • 使用服务器上的 web.config 在我的机器上运行应用程序——一切正常
  • 检查 Login.aspx 的重定向命令——没有
  • 已清除缓存 - 问题仍然存在
  • 重新发布 - 问题仍然存在
  • 重新发布并清除缓存 - 问题仍然存在
  • 在 IIS 中禁用默认文档
4

3 回答 3

5

将分享这个以防万一它是一个答案,因为这听起来像我们遇到的问题。

  1. ASP.net MVC 站点[RequiresHttps]在我们的登录操作上具有属性。

  2. 在进行 SSL 加速的负载均衡器后面(导致实际命中服务器端代码的请求已经解码并在 http 下有效)。

  3. 服务器代码认为这是一个问题,并使用 https 重定向回自身。

  4. 冲洗并重复。


自从回答这个问题以来已经有很长时间了,我在下面关于“不使用 RequireHttps”的评论可能有点过时了。

任何看到这个答案并认为它回答了他们的问题的人都可能会被建议考虑配置他们的负载均衡器以使用 X-Forwarded-Proto 标头:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto

然后设置他们的 MVC 站点,以便能够阅读这些内容,并且仍然认为它们在环境边界的 HTTPS 下:

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-6.0

于 2012-07-02T14:55:55.730 回答
2

发现了问题。在 MasterPage 中找到了这个逻辑:

Dim strPage As String = Request.Url.AbsolutePath.Replace("/", "")
    'Check that user is logged in
    If Not strPage = "Login.aspx" And Not strPage = "Register.aspx" Then
        If Session("intUserId") Is Nothing Then
            Response.Redirect("~/Login.aspx", True)
        End If
    End If

显然,当浏览到服务器上的 Login.aspx 时,strPage 不等于 Login.aspx。

当我调查它时,我应该咳嗽一下。感谢罗斯的评论,它帮助我找到了这个!

于 2012-07-02T15:27:54.307 回答
1

我遇到过类似的错误。但我的错字有两个 Response.Redirect背靠背。

If (conditon1){
    Response.Redirect("Page1.aspx");
}
If (conditon2){
    Response.Redirect("Page2.aspx");
}

解决方法是简单地将另一个if放在else块中。

于 2017-06-30T22:42:01.237 回答