FormUrlEncodedContent 踩坑記


起因

使用 FormUrlEnCodeContent 提交數據時,提示簽名錯誤。經過多次協調簽名沒有錯誤,標准的base64字符串。

  var fd = new Dictionary<string, string>();
  // 添加業務數據部分省略
  var parth = "/api/api/mall/order/info/V1"
  var client = _httpClientFactory.CreateClient("Dev_Biz1");
  var res = await client.PostAsync(path, new FormUrlEnCodeContent(fd));
  var code = (int)res.StatusCode;
  var content = await res.Content.ReadAsStringAsync();

原因

FormUrlEnCodeContent的編碼格式不是 utf-8, 而是Encoding.Latin1
具體代碼看着里:FormUrlEnCodeContent
和這里HttpRuleParser

解決方式

使用StringContent替代,並指定編碼格式為 utf-8

  var formStr = string.Join('&', fd.Select(kv=> $"{kv.Key}={HttpUtility.UrlEncode(kv.Value)}"));
  var formCtx = new StringContent(formStr , Encoding.UTF8,"application/x-www-form-urlencoded");
  var res = await client.PostAsync(path, formCtx);


免責聲明!

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



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