iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0
自我挑戰組

Bug仔的筆記本系列 第 21

為什麼跳轉網址中,參數會遺失?

  • 分享至 

  • xImage
  •  

今天一樣是修復跳轉的問題 ~"~

我也不曉得要歸類為 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這個參數不見了!?

聰明的你一定發覺了,因為&分隔符號的關西

對登入頁面來說,他收到兩個參數

  1. ReturnUrl = http://localhost/Students/Survey?id=1
  2. class = 2

所以登入成功後, ReturnUrl 被當成你的目的地,而其他參數就被忽視掉了。

要解決這個辦法很簡單。

JavaScript encodeURIComponent()

在 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# HttpUtility.UrlEncode()、Uri.EscapeDataString()

在 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

上一篇
從 Owin 調整未登入用戶的跳轉邏輯
下一篇
複選選了什麼?用位元運算 "&" 、 " |" 知道 Check Box 選了什麼!(一)
系列文
Bug仔的筆記本30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言