[英]HttpClient Post request with Json body
我试图将POST
请求发送到具有JSON正文和URL中的param( param
)的API。
该请求运行正常,但从API发送回的响应表明, customObj
的值未传递给API?
我已经多次更改了实现方式,但似乎无法弄清楚为什么正文消息无法通过? 我已经检查了curl
,可以看到它由主体和JSON消息组成。
我唯一能想到的就是Content-Type:
具有application/json-patch+json
而应该仅是application/json
class customObj{
public string param1 {get;set;}
public string param2 {get;set;}
public string param3 {get;set;}
}
string result;
var url = $"/test/{param}/dothis";
var jSonData = JsonConvert.SerializeObject(customObj);
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("https://www.testapi.com");
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
using (var response =
await httpClient.PostAsync(url, new StringContent(jSonData, Encoding.UTF8, "application/json")))
{
using (var content = response.Content)
{
var result = await content.ReadAsStringAsync();
}
}
}
卷曲
curl -X POST "<url>" -H "accept: application/json"
-H "Content-Type: application/json-patch+json" -d "{ \"param1\": \"test1\", \"param2\": \"test2\", \"param3\": \"test3\"}"
终于解决了。 问题是由于我在Json
体内使用PascalCasing
,而终点是使用camelCasing
因此它无法读取属性值。
所以代替这个
var jSonData = JsonConvert.SerializeObject(customObj);
在对json对象进行序列化时,我不得不使用骆驼肠衣解析器。
var changePassObj = JsonConvert.SerializeObject(customObj,
new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.