C#后台调用WebApi接口的四种实现方法

许南星
许南星
发布时间:2026-10-15 | 5人浏览过
原创

在C#开发中,后台程序调用WebApi接口是常见的交互需求。本文将详细演示如何使用HttpWebRequest、HttpClient以及WebClient等核心类库,完成POST、GET、PUT、DELETE等常用HTTP请求,涵盖JSON数据的序列化处理与响应接收。

基于HttpWebRequest的请求实现

HttpWebRequest 是 .NET Framework 中传统的 HTTP 请求类,适用于需要精细控制请求头或兼容旧版本框架的场景。

第1步:执行POST请求

目的:向指定URL发送JSON数据并获取响应字符串。

  • 入口:定义一个静态辅助方法 HttpPost。
  • 参数:目标URL和待提交的JSON Body字符串。
  • 动作:
  1. 创建 HttpWebRequest 实例并指定 Method 为 "POST"。
  2. 设置 Content-Type 为 application/json。
  3. 将Body转换为UTF-8字节流,写入请求流。
  4. 读取响应流并返回文本结果。
public static string HttpPost(string url, string body)
{
    Encoding encoding = Encoding.UTF8;
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "POST";
    request.Accept = "text/html, application/xhtml+xml, */*";
    request.ContentType = "application/json";

    byte[] buffer = encoding.GetBytes(body);
    request.ContentLength = buffer.Length;
    request.GetRequestStream().Write(buffer, 0, buffer.Length);

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
    {
        return reader.ReadToEnd();
    }
}

第2步:执行GET请求

目的:从服务器获取数据,通常用于查询操作。

  • 入口:定义静态方法 HttpGet。
  • 动作:配置 HttpWebRequest 的 Method 为 "GET",直接获取响应流。
public static string HttpGet(string url)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "GET";
    request.Accept = "text/html, application/xhtml+xml, */*";
    request.ContentType = "application/json";

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
    {
        return reader.ReadToEnd();
    }
}

基于HttpClient的异步请求实现

HttpClient 是现代 .NET 应用推荐使用的 HTTP 客户端,支持异步编程模型(async/await),性能更佳且资源管理更友好。

第3步:发送DELETE请求

目的:删除服务器上的资源。

  • 动作:使用 client.DeleteAsync 发送请求,并通过 IsSuccessStatusCode 判断操作是否成功。
private async void DeleteData()
{
    HttpClient client = new HttpClient();
    HttpResponseMessage response = await client.DeleteAsync("http://localhost:41558/api/Demo/1");
    if (response.IsSuccessStatusCode)
    {
        // 处理成功逻辑
    }
}

第4步:发送PUT请求(含JSON序列化)

目的:更新服务器资源,需将对象序列化为JSON格式。

  • 准备:定义包含 [DataContract] 特性的实体类(如 People)。
  • 动作:
  1. 使用 DataContractJsonSerializer 将对象写入内存流。
  2. 重置内存流位置为 0。
  3. 包装为 StreamContent 并设置头部类型为 JSON。
  4. 调用 PutAsync 发送请求。
private async void UpdateData()
{
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(People));
    MemoryStream ms = new MemoryStream();
    serializer.WriteObject(ms, new People() { Id = 1, Name = "Update Name" });
    
    // 关键:重置流位置
    ms.Position = 0;
    HttpContent content = new StreamContent(ms);
    content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");

    HttpClient client = new HttpClient();
    HttpResponseMessage response = await client.PutAsync("http://localhost:41558/api/Demo/1", content);
    if (response.IsSuccessStatusCode)
    {
        // 处理成功逻辑
    }
}

基于WebClient的轻量级调用

WebClient 提供了更简化的同步和异步API,适合简单的下载或上传任务。

第5步:异步GET请求

目的:以异步方式获取字符串数据,避免阻塞UI线程。

  • 动作:
  1. 设置 RequestHeaders 和 Encoding。
  2. 订阅 DownloadStringCompleted 事件处理回调。
  3. 调用 DownloadStringAsync 启动请求。
using (WebClient client = new WebClient())
{
    client.Headers["Type"] = "GET";
    client.Headers["Accept"] = "application/json";
    client.Encoding = Encoding.UTF8;
    
    client.DownloadStringCompleted += (senderobj, es) =>
    {
        if (es.Error == null)
        {
            var obj = es.Result;
            // 处理返回数据
        }
    };
    client.DownloadStringAsync(new Uri("http://localhost:41558/api/Demo"));
}

总结

以上介绍了在C#中通过不同的类库调用WebApi接口的具体实现。对于传统项目,HttpWebRequest 提供了底层控制能力;而在新建项目中,推荐使用支持异步的 HttpClient 以获得更好的性能和可维护性;WebClient 则适合简单的异步文本交互。根据实际需求选择合适的工具,可以有效提升接口调用的稳定性。

以上就是C#后台调用WebApi接口的详细内容,更多关于C# API编程的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表