【问题标题】:httphandler redirect goes in infinite loophttphandler 重定向进入无限循环
【发布时间】:2013-05-03 23:47:42
【问题描述】:

我有一个 httphandler,它拦截一个名为“calderdale”的文件夹中的任何 pdf 文件请求,并将用户重定向到登录页面。这就是我重定向的方式

  if (memberLoginName == "UNKNOWN" && !isDomainFallthrough)
        {

            // Check if the user is logged in, if not redirect to Login page.
            context.Response.Redirect("~/Login.aspx?retUrl=" + HttpUtility.UrlEncode(context.Request.Url.ToString()));
        }
        else
        {
       // download file
         }

例如初始请求是针对“http://local.knowledge.scot.nhs.uk/calderdale/1.pdf”的 并且返回 url 变为“http://local.knowledge.scot.nhs.uk/Login.aspx?retUrl=http://local.knowledge.scot.nhs.uk/calderdale/1.pdf

由于返回 url 还包含“calderdale/1.pdf”,因此该 url 再次被截获并进入无限循环。 任何想法我们如何才能阻止这种无限循环?谢谢

【问题讨论】:

  • 你不能检测 url 是否包含 ~/Login.aspx 并在那个时候打破循环吗?
  • 根据您的描述,听起来您只是在字符串中搜索地址。相反,您应该尝试将字符串解析为 URI,并且只检查路径部分。
  • 尝试从重定向 URL 中删除最后一个字符,看看它是否循环。也就是说,确认您正在返回处理程序,因为文件类型似乎是“.pdf”。
  • 我的回答有帮助吗?如果是这样,请接受它,以便其他人也可以使用它。如果不是,您是否找到了解决问题的其他方法?

标签: c# asp.net httphandler


【解决方案1】:

你能想到的第一件事就是 HttpHandler 是如何被调用的。为什么它会检测查询字符串中的 url?

除此之外,您的问题有一个非常简单的解决方案(假设它实际上是由查询字符串中的 url 引起的)。 而不是使用 UrlEncode - 将字符串转换为 Base64,登录 url 将如下所示:

http://local.knowledge.scot.nhs.uk/Login.aspx?retUrl=aHR0cDovL2xvY2FsLmtub3dsZWRnZS5zY290Lm5ocy51ay9jYWxkZXJkYWxlLzEucGRm

有关如何在 base 64 之间编码和解码字符串的更多信息:http://blogs.microsoft.co.il/blogs/mneiter/archive/2009/03/22/how-to-encoding-and-decoding-base64-strings-in-c.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 2012-06-08
    • 2019-08-31
    • 1970-01-01
    相关资源
    最近更新 更多