繁体   English   中英

带有Json正文的HttpClient Post请求

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM