0

我有一个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 再次被拦截,并进入无限循环。任何想法我们如何才能阻止这种无限循环?谢谢

4

1 回答 1

0

您首先想到的是 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

于 2013-05-04T01:05:46.213 回答