.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
相关产品推荐
相关产品推荐

