You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#发送带JSON内容的HTTP PUT请求时JSON解析报错问题

问题分析与解决方案

错误原因

你当前的代码把字符串 "id: 0" 直接序列化,得到的JSON内容是 "id: 0"(一个JSON字符串),但API要求的是JSON对象(格式类似 {"id": 0})。当API尝试解析请求体时,它会读取到字符串内部的 id: 0,这不符合JSON对象的语法规范,因此在解析到第一个字符 i 时触发语法错误。

修正方案

1. 构造正确的请求体对象

不要直接使用字符串,而是创建对应的数据结构(匿名类或自定义类)来匹配API期望的JSON格式:

方式一:使用匿名类(快速实现)

var payload = new { id = 0 };
var jsonPut = JsonConvert.SerializeObject(payload);

序列化后得到的JSON是:{"id":0},完全符合API要求的对象格式。

方式二:使用自定义类(更适合复杂场景)

// 定义与API请求结构匹配的类
public class UpdateRequest
{
    public int Id { get; set; } // 属性名需与API要求的字段名一致(注意大小写)
}

// 构造请求体对象
var payload = new UpdateRequest { Id = 0 };
var jsonPut = JsonConvert.SerializeObject(payload);

2. 优化后的完整代码

另外,注意不要每次请求都创建新的HttpClient实例(HttpClient设计为复用,频繁创建会导致资源泄漏),优化后的代码如下:

// 全局复用HttpClient实例
private static readonly HttpClient _httpClient = new HttpClient();

// 请求方法内代码
async Task SendPutRequest()
{
    string url = "https://...";
    Debug.WriteLine(url);

    // 构造符合要求的请求体对象
    var payload = new { id = 0 };
    var jsonContent = JsonConvert.SerializeObject(payload);
    var requestContent = new StringContent(jsonContent, Encoding.UTF8, "application/json");

    // 设置Accept头(可全局设置一次,无需每次请求添加)
    _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    HttpResponseMessage response = await _httpClient.PutAsync(url, requestContent);
    if (response.IsSuccessStatusCode)
    {
        Debug.WriteLine("Put made correctly");
    }
    else
    {
        Debug.WriteLine("Error in put");
        Debug.WriteLine($"Status code: {response.StatusCode}");
        // 可选:获取API返回的错误详情
        string errorDetails = await response.Content.ReadAsStringAsync();
        Debug.WriteLine($"Error details: {errorDetails}");
    }
}

额外说明

  • 确保属性名(如id)的大小写与API文档要求一致,部分API对大小写敏感
  • 若API有其他必填字段,需在对象中补充对应属性

内容的提问来源于stack exchange,提问作者WakiApi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 20:39:27