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

如何在C#中使用HttpClient的DeleteAsync方法传递JSON请求体?

解决C# HttpClient DeleteAsync传递JSON请求体失败的问题

你的代码无法成功传递请求体,核心问题是未给StringContent设置正确的媒体类型标识,导致服务器无法识别请求体格式,同时直接使用.Result阻塞调用存在潜在死锁风险。以下是修正方案:

修正后的代码

using System.Net.Http;
using System.Text;
using Newtonsoft.Json;

// 建议全局单例化HttpClient,避免频繁创建实例耗尽套接字资源
private static readonly HttpClient _httpClient = new HttpClient();

public async Task DeleteTargetItemsAsync()
{
    var targetIds = new[] { 100, 202, 304, 866 };
    string apiEndpoint = "你的接口地址";
    string jsonBody = JsonConvert.SerializeObject(targetIds);
    
    // 关键:添加application/json媒体类型,明确告诉服务器请求体格式
    var requestContent = new StringContent(jsonBody, Encoding.UTF8, "application/json");

    // 使用await异步调用,替代.Result阻塞方式
    var response = await _httpClient.DeleteAsync(apiEndpoint, requestContent);
    
    // 可选:验证请求是否成功,失败时抛出异常
    response.EnsureSuccessStatusCode();
}

额外注意事项

  • HttpClient实例管理:不要每次请求都创建新的HttpClient实例,推荐全局单例或在ASP.NET Core中使用IHttpClientFactory,避免套接字资源泄漏。
  • Delete请求带Body的兼容性:虽然HTTP标准允许Delete请求携带请求体,但部分服务器、代理可能会忽略该请求体。如果遇到这类兼容问题,可以考虑:
    • 将ID参数放到URL查询字符串中(适合少量ID场景)
    • 改用Post请求模拟删除操作(比如POST到/api/items/batch-delete接口)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:25:51