C#怎么发送HTTP POST请求 C# HttpClient发送JSON数据方法

用 HttpClient 发送 POST 请求并提交 JSON 数据的核心是:创建复用的 HttpClient 实例、序列化对象为 UTF-8 编码的 application/json 格式 StringContent、调用 PostAsync 并检查 IsSuccessStatusCode。

c#怎么发送http post请求 c# httpclient发送json数据方法

HttpClient 发送 POST 请求并提交 JSON 数据,是 C# 中最常用、最推荐的方式。核心就三点:创建客户端、构造 JSON 内容、发起请求。

准备 JSON 数据并序列化

先用 System.Text.Json(.NET Core 3.0+ 推荐)或 Newtonsoft.Json 把对象转成 JSON 字符串,再包装成 StringContent

  • 确保目标类型有公共属性(字段不参与序列化)
  • 设置 MediaType"application/json"
  • 编码推荐用 Encoding.UTF8,避免中文乱码

示例:

魔珐星云

魔珐星云

无需昂贵GPU,一键解锁超写实/二次元等多风格3D数字人,跨端适配千万级并发的具身智能平台。

下载

var user = new { Name = "张三", Age = 25 };
var json = JsonSerializer.Serialize(user);
var content = new StringContent(json, Encoding.UTF8, "application/json");

使用 HttpClient 发起 POST 请求

HttpClient 应该复用(全局单例或注入),不要每次 new。发送时调用 PostAsync

  • URL 必须是完整地址(含 http://https://
  • 响应需用 await response.Content.ReadAsStringAsync() 读取结果
  • 记得检查 response.IsSuccessStatusCode 判断是否成功

示例:

using var client = new HttpClient();
var response = await client.PostAsync("https://api.example.com/users", content);
if (response.IsSuccessStatusCode)
{
    var result = await response.Content.ReadAsStringAsync();
    Console.WriteLine(result);
}

处理常见问题

实际开发中容易卡在这几个地方:

  • 400 Bad Request:JSON 格式不对,或后端字段名/类型不匹配(注意大小写和命名策略)
  • 401/403:缺认证头,用 client.DefaultRequestHeaders.Authorization 添加 Token
  • 超时:通过 new HttpClient(new HttpClientHandler(), false) { Timeout = TimeSpan.FromSeconds(30) } 设置
  • SSL 证书错误(仅调试):自定义 HttpClientHandler.ServerCertificateCustomValidationCallback

完整可运行小例子

把上面整合起来,一个最小可用片段:

var data = new { Title = "测试文章", Content = "Hello World" };
var json = JsonSerializer.Serialize(data);
var content = new StringContent(json, Encoding.UTF8, "application/json");

using var client = new HttpClient(); var res = await client.PostAsync("https://www.php.cn/link/dc076eb055ef5f8a60a41b6195e9f329", content); Console.WriteLine(await res.Content.ReadAsStringAsync());

基本上就这些。不复杂但容易忽略编码、复用和状态判断 —— 补上这三点,99% 的 POST 提交都稳了。

https://www.php.cn/faq/2019465.html

发表回复

Your email address will not be published. Required fields are marked *