在C#开发中,HttpClient是处理HTTP请求的核心类,它提供了异步的请求发送能力,适合各类接口调用场景。无论是获取第三方数据还是提交业务信息,都可以通过它高效完成。
HttpClient基础准备
使用HttpClient前需要先创建实例,建议将其声明为静态变量避免频繁创建销毁,减少资源消耗。同时要注意HttpClient默认支持异步操作,所有请求方法都建议配合async/await使用。
using System;
using System.Net.Http;
using System.Threading.Tasks;
class HttpClientDemo
{
// 静态HttpClient实例,避免重复创建
private static readonly HttpClient _httpClient = new HttpClient();
}
GET请求实现方法
GET请求主要用于从服务器获取数据,参数通常拼接在URL后面。HttpClient提供了GetAsync方法用于发送GET请求,我们可以通过该方法获取响应内容。
基础GET请求示例
private static async Task SendGetRequest()
{
try
{
// 目标请求地址,可拼接查询参数
string url = "https://ipipp.com/api/getUserInfo?id=1001";
// 发送GET请求
HttpResponseMessage response = await _httpClient.GetAsync(url);
// 确保响应成功
response.EnsureSuccessStatusCode();
// 读取响应内容为字符串
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine($"GET请求响应结果:{responseBody}");
}
catch (HttpRequestException ex)
{
Console.WriteLine($"GET请求发生异常:{ex.Message}");
}
}
带请求头的GET请求
如果接口需要携带认证信息等请求头,可以通过DefaultRequestHeaders属性添加。
private static async Task SendGetRequestWithHeader()
{
// 添加认证请求头
_httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer test_token_123");
_httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
string url = "https://ipipp.com/api/getOrderList";
HttpResponseMessage response = await _httpClient.GetAsync(url);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine($"带请求头的GET响应:{responseBody}");
}
POST请求实现方法
POST请求通常用于向服务器提交数据,参数放在请求体中。HttpClient的PostAsync方法支持发送各类格式的请求体,常见的有表单格式和JSON格式。
表单格式POST请求
表单格式需要构造FormUrlEncodedContent对象作为请求体。
private static async Task SendPostFormRequest()
{
try
{
string url = "https://ipipp.com/api/submitUser";
// 构造表单参数
var formData = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("username", "testUser"),
new KeyValuePair<string, string>("age", "25"),
new KeyValuePair<string, string>("email", "test@ipipp.com")
};
// 创建表单内容对象
var content = new FormUrlEncodedContent(formData);
// 发送POST请求
HttpResponseMessage response = await _httpClient.PostAsync(url, content);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine($"表单POST响应:{responseBody}");
}
catch (HttpRequestException ex)
{
Console.WriteLine($"POST表单请求异常:{ex.Message}");
}
}
JSON格式POST请求
JSON格式是当前接口最常用的数据格式,需要将对象序列化为JSON字符串后作为请求体,同时设置Content-Type为application/json。
using System.Text;
using System.Text.Json;
private static async Task SendPostJsonRequest()
{
try
{
string url = "https://ipipp.com/api/createOrder";
// 构造请求数据对象
var orderData = new
{
orderId = "ORD202405001",
productName = "测试商品",
price = 199.99,
count = 2
};
// 序列化为JSON字符串
string jsonStr = JsonSerializer.Serialize(orderData);
// 创建JSON内容对象,指定编码和媒体类型
var content = new StringContent(jsonStr, Encoding.UTF8, "application/json");
// 发送POST请求
HttpResponseMessage response = await _httpClient.PostAsync(url, content);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine($"JSON POST响应:{responseBody}");
}
catch (HttpRequestException ex)
{
Console.WriteLine($"POST JSON请求异常:{ex.Message}");
}
}
使用注意事项
- HttpClient实例不要频繁创建和释放,静态单例是最佳实践,避免端口耗尽问题
- 所有请求方法都是异步的,调用时需要配合async/await,不要使用Result等方式阻塞线程
- 发送请求后建议判断响应状态码,或者通过
EnsureSuccessStatusCode方法直接抛出非成功状态的异常 - 如果需要设置超时时间,可以修改
_httpClient.Timeout属性,默认超时时间为100秒 - 请求完成后不需要手动释放HttpClient实例,静态实例会跟随应用生命周期自动管理
C#HttpClientGET请求POST请求修改时间:2026-06-22 21:06:46