2013-05-03 255 views
0

我有一个httphandler拦截任何pdf文件请求存在于名为“calderdale”的文件夹内,并将用户重定向到登录页面。这就是我如何重定向httphandler重定向进入无限循环

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中还含有“卡尔德达尔/次数1.pdf”这个URL被再次拦截,这正好在无限循环。 任何想法我们如何能够阻止这种无限循环?谢谢

+0

如果url包含〜/ Login.aspx并且在那个时候打破循环,你不能检测到吗? – Jras 2013-05-03 23:51:44

+1

根据你的描述,这听起来像你只是在寻找地址的字符串。相反,您应该尝试将字符串解析为URI,并仅检查路径部分。 – dlev 2013-05-03 23:52:53

+0

尝试删除重定向网址中的最后一个字符,看看它是否循环。也就是说,确认你回到你的处理程序,因为文件类型看起来是“.pdf”。 – 2013-05-04 01:36:46

回答

0

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

除此之外,有一个非常简单的解决方案,您的问题(给它真的是由查询字符串中的网址引起的)。 而不是使用以UrlEncode的 - 字符串转换为Base64和登录URL看起来如下:

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

有关如何进行编码和解码字符串,并从底部64的更多信息:http://blogs.microsoft.co.il/blogs/mneiter/archive/2009/03/22/how-to-encoding-and-decoding-base64-strings-in-c.aspx