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

.NET Core中如何向Web API提交JSON?现有代码无法运行求助

.NET Core向Web API提交JSON数据的问题排查与修正

原代码存在的问题:

  • 内容类型不匹配:用FormUrlEncodedContent提交的是表单格式数据,而非API预期的JSON格式,导致接口无法正确解析请求体。
  • 请求对象被覆盖:先创建HttpRequestMessage并设置Accept头,随后重新实例化覆盖了原对象,导致Accept头的设置完全失效。
  • 异步方法未等待:PostAsync是异步方法,未添加await关键字,会导致请求可能未实际执行,或无法获取正确的响应结果。
  • 日期格式不规范:直接调用Date_Of_Birth.ToString()生成的日期格式可能不符合API的解析标准,容易引发格式错误。

修正后的代码:

// 建议HttpClient复用,避免每次请求新建实例
using var client = new HttpClient();
// 设置Accept头,告知服务器期望JSON格式的响应
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var requestData = new 
{
    FirstName = user.FirstName,
    LastName = user.LastName,
    Date_Of_Birth = user.Date_Of_Birth.ToString("o"), // 使用ISO 8601标准日期格式
    Gender = user.Gender,
    Status = user.Status.ToString()
};

// .NET 5+ 推荐使用JsonContent直接序列化对象为JSON内容
var jsonContent = JsonContent.Create(requestData);

// 若使用.NET Core 3.1及以下版本,可替换为StringContent:
// var jsonString = System.Text.Json.JsonSerializer.Serialize(requestData);
// var jsonContent = new StringContent(jsonString, System.Text.Encoding.UTF8, "application/json");

// 发送POST请求并等待响应
var response = await client.PostAsync("https://localhost:7169/api/User/Add", jsonContent);

// 可选:确保请求成功,否则抛出异常
response.EnsureSuccessStatusCode();

// 可选:读取响应内容
var responseContent = await response.Content.ReadAsStringAsync();

额外注意事项:

  • 确保Web API的Add接口使用[FromBody]特性接收参数,示例如下:
    [HttpPost("Add")]
    public IActionResult AddUser([FromBody] UserDto userDto)
    {
        // 业务处理逻辑
        return Ok();
    }
    
  • HttpClient应尽量复用,可通过依赖注入的方式管理其生命周期,避免频繁创建销毁带来的性能损耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:40:29