使用HttpClient调用REST API,请求体传用户名密码失败求助
解决HttpClient请求体无法传递用户名密码的问题
你的代码核心错误是创建StringContent时,误用了data.ToString()而非序列化后的jsonData。Dictionary的默认ToString()方法返回的是类型标识字符串(例如System.Collections.Generic.Dictionary2[System.String,System.String]`),并非有效的JSON内容,导致API无法解析请求体。
修正后的代码如下:
var data = new Dictionary<string, string> { {"username","username"}, {"password","password"} }; var jsonData = JsonConvert.SerializeObject(data); HttpClient client2 = new HttpClient(); // 替换为序列化后的JSON字符串 var requestContent2 = new StringContent(jsonData, Encoding.UTF8, "application/json"); client2.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", access_token); HttpResponseMessage response2 = await client2.PostAsync(nitaauthapi, requestContent2); HttpContent content2 = response2.Content; string result2 = await content2.ReadAsStringAsync(); JObject jObject2 = JObject.Parse(result2); string NONCE = jObject2["NONCE"].Value<string>();
额外注意事项:
- 确认已正确引用Newtonsoft.Json NuGet包(代码中用到了
JsonConvert) - 如果API要求接收表单格式(
application/x-www-form-urlencoded),则需改用FormUrlEncodedContent,而非StringContent - 建议复用HttpClient实例,避免每次请求都新建对象,防止Socket资源耗尽
内容的提问来源于stack exchange,提问作者Nelson Kibet
相关产品推荐
相关产品推荐

