c#_HttpClient_application/x-www-form-urlencoded_參數轉義


導讀: 僅供使用httpclient庫模擬http請求,Post請求頭

Content-Type: application/x-www-form-urlencoded 遇到 非字母或數字的字符 時轉義的問題
直接上code: https://github.com/dswyzx/forblogs
及結果截圖

 

1:問題:因對接接口,參數內存在字符"+",導致雙方對參數進行確認時發生分歧
具體表現為:"+"字符在httpclient 為HttpRequestMessage 請求體封裝HttpRequestMessage.Content時,全部參數默認被打包為byte數組,並沒有像瀏覽器默認操作一樣事先對參數進行encoding操作
"數據被編碼成以  '&' 分隔的鍵-值對, 同時以  '=' 分隔鍵和值 . 非字母或數字的字符會被  percent-encoding" 援引: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/POST
2:發起請求:
 
HttpUtility.UrlEncode(string str)

 使用 urlencode方法,對請求體的body內存在需要轉義字符時提前進行轉義.比如"+"轉義為"%2b"," "轉義為"+"或"%20" 援引  https://developer.mozilla.org/zh-CN/docs/Glossary/percent-encoding

然后再拼接為字符串以提供給StringContent所需的content參數.

3:接收參數

本實驗使用.NET Framework 4.5 默認生成的MVC框架模擬接受Form請求參數.

另附curl僅供參考

curl --location --request POST 'https://localhost:44343/home/GetUserInfo' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'k=1%2b1'

 

4:結束語

整日搬磚,卻對方法體不求甚解.借此記錄,以供參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM