正文为 Json 的 HttpClient Post 请求
HttpClient Post request with Json body
我正在尝试向 API 发送 POST
请求,其中包含 JSON 正文和 URL 中的参数 (param
)。
请求顺利通过,但从 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
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()
});
我正在尝试向 API 发送 POST
请求,其中包含 JSON 正文和 URL 中的参数 (param
)。
请求顺利通过,但从 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
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()
});