C#怎么使用HttpClient发送请求?GET和POST方法怎么实现?

来源:站长论坛作者:桃乃木香奈头衔:网络博主
导读:本期聚焦于小伙伴创作的《C#怎么使用HttpClient发送请求?GET和POST方法怎么实现?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#怎么使用HttpClient发送请求?GET和POST方法怎么实现?》有用,将其分享出去将是对创作者最好的鼓励。

在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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。