起因
使用 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);
