2013-05-03 169 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