正文为 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() 
                });