2011年8月20日 星期六

Get 參數在 WebBrowserTask 失蹤的問題

WebBrowserTask 是在 Windows Phone 上常用來開啟 Browser 的方式…
一直以來都只是拿來開網頁…某次因為配合某項活動做了特別的事…
開啟網頁時必須串上一些 Checksum 字串做參數…這時就發生了以前沒遇過的怪事…

若是有字串經過 Base64 等編碼方式編過要串在 Get 或 Post 之中…
這些編完的字串都得經過 HttpUtility.UrlEncode 這算是常識…
但已經做過處理的 URL 還是沒辦法讓 Server 端的同事完整的收到…
觀察 Browser 的網址列發現網址被切斷了…每次切的位置不一定…
但都與連接各參數的 & 符號離不開關係…
搜尋了一下是否有其他人遇到同樣的狀況後證實…
這似乎是 Windows Phone 上面 WebBrowserTask 的 bug

所以在 Windows Phone 上為了確保 URL 能夠完整的被 WebBrowserTask 識別…
務必使用 System.Uri.EscapeDataString() 處理過整個完整的 URL
以下是個簡單 "錯誤示範"


string strHost = "ascii.aaa.bbb.ccc";
string strURL = "/ascii.php?";
string strParams = "param=" + HttpUtility.UrlEncode("NA+DFNBO+ADF-FAW/==");
string strFullURL = "http://" + strHost + strURL + strParams;
WebBrowserTask browserTask = new WebBrowserTask();
browserTask.URL = strFullURL;
browserTask.Show();


正確的作法不需對參數內容做處理…應直接處理整個 FullURL 如下示範…


string strHost = "ascii.aaa.bbb.ccc";
string strURL = "/ascii.php?";
string strParams = "param=NA+DFNBO+ADF-FAW/==";
string strFullURL = "http://" + strHost + strURL + strParams;
WebBrowserTask browserTask = new WebBrowserTask();
browserTask.URL = Uri.EscapeDataString(strFullURL);
browserTask.Show();

沒有留言:

張貼留言