跳到主要內容

JSON POST 字元編碼錯誤解決

如過將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反序列成物件時,就會發生問題,如下圖所示SNAGHTML767d11



亦或者URL位址中如果網址是webpage.aspx?var=parm ,則可能會發生錯誤,如使用context.Request.Form[0]接POST內容時,就會把=左邊當Key值,=右邊當內容,這樣傳遞後就會有問題,其實要解決的方法很簡單,只要把要POST的內容真的透過UrlEncode去處理就可以了,這樣不論傳遞甚麼特殊字元都不會被置換。

postData = System.Web.HttpUtility.UrlEncode(postData);

感謝同事RobinKyle的提點。

留言

這個網誌中的熱門文章

如何使用電子發票應用API

財政部在電子發票推行上,為了方便開發更多應用所以提供了API可供個人或者廠商進行相關應用的開發,申請的方式請參考 –> 電子發票API申請 最簡單的申請方式就是透過自然人憑證或者工商憑證申請,這樣就不需要檢附任何證明文件。不過這不是本篇的重點,當申請到時會給你一組AppID跟APIKey,然後你可以下載 電子發票應用規格1.4版 來了解怎樣使用這個API,或許是我才疏學淺,所以在1.3版的時候其實搞不太懂他的API文件,到了1.4版才摸清楚發生了什麼事,當然還是花了點時間才搞懂,現在就簡單說明一下API的使用方式,希望看到本篇文章的同好就不需要花時間測試了。

以管理者權限執行批次檔

最近有個專案需要執行批次檔,來進行某些設定或者城市的安裝,在XP上這個Script可以運行沒問題,可是一到Vista以後的Windows版本就無法運行了,最主要的原因是,UAC的管制的問題,幾經尋找,總算找到一個可行的解決辦法。

RDLC中使用子報表

最近在處理報表時發現一個問題,就是子報表的設定,在主報表中可以加入子報表,如果只有根據MSDN官方的範例去撰寫,會發現其實在運行的時候會發生錯誤,錯誤訊息[An error occurred during local report processing. Value cannot be null. Parameter name: value ],經過了同事的協助後,終於解決了這個問題,原來魔鬼真的藏在細節中。