今天一樣是修復跳轉的問題 ~"~
我也不曉得要歸類為 Bug 還是 Feature
PM 發現若在填寫問卷的頁面中,點選了會員登入,登入完之後會跑去首頁,而不是原本的問卷頁面。
小問題應該很簡單。加上個 ReturnUrl 應該就可以了
假設目前問卷網址如下:
http://localhost/Students/Survey?id=1&class=2
而你要登入時帶入的網址如下:
http://localhost/Account/Login?ReturnUrl=http://localhost/Students/Survey?id=1&class=2
目前我遇到的情況是希望,登入後會連到上述第一個網址,實際上連到的網址如下
http://localhost/Students/Survey?id=1
class
這個參數不見了!?
聰明的你一定發覺了,因為&
分隔符號的關西
對登入頁面來說,他收到兩個參數
http://localhost/Students/Survey?id=1
2
所以登入成功後, ReturnUrl 被當成你的目的地,而其他參數就被忽視掉了。
要解決這個辦法很簡單。
在 JavaScript 中 可以使用 encodeURIComponent()
方法來幫你的 URL 編碼,再把編碼後的結果塞到 ReturnUrl= 後面
encodeURIComponent('http://localhost/Students/Survey?id=1&class=2')
// 'http%3A%2F%2Flocalhost%2FStudents%2FSurvey%3Fid%3D1%26class%3D2'
你可以發現:
、/
、?
、&
、+
、=
等,被編譯成 UTF-8 。 這樣就不會被當成不同的參數。
在 C# 在編碼 URL 方面,用 HttpUtility.UrlEncode()
或 Uri.EscapeDataString()
會得到 encodeURIComponent()
一樣的結果。
// HttpUtility.HtmlEncode(test)
http://localhost/Students/Survey?id=1&class=2
// HttpUtility.UrlEncode(test)
http%3a%2f%2flocalhost%2fStudents%2fSurvey%3fid%3d1%26class%3d2
// Uri.EscapeUriString(test)
http://localhost/Students/Survey?id=1&class=2
// Uri.EscapeDataString(test)
http%3A%2F%2Flocalhost%2FStudents%2FSurvey%3Fid%3D1%26class%3D2