如過將JSON透過POST方式傳遞時,由於希望處理特殊符號,所以通常會宣告
HttpWebRequest.request.ContentType = "application/x-www-form-urlencoded";
這是告知這個內容已經有經過urlencod了,但是如過直接將內容傳遞,包含某些特殊符號的內容,就會發生錯誤如:Date資料的 + 號字元或者URL中常帶入的Query String,如 webpage.aspx?var=parm 這類的字串,POST之後就會發生錯誤。
由於JSON的DATE格式應該是像:
\/Date(1370833150714+0800)\/
但是,如果透過POST會發生傳遞後的資料變成
\/Date(1370833150714 0800)\/
這時候如果要將JSON反序列成物件時,就會發生問題,如下圖所示
亦或者URL位址中如果網址是webpage.aspx?var=parm ,則可能會發生錯誤,如使用context.Request.Form[0]接POST內容時,就會把=左邊當Key值,=右邊當內容,這樣傳遞後就會有問題,其實要解決的方法很簡單,只要把要POST的內容真的透過UrlEncode去處理就可以了,這樣不論傳遞甚麼特殊字元都不會被置換。
postData = System.Web.HttpUtility.UrlEncode(postData);
感謝同事Robin、Kyle的提點。
留言