C#后台调用WebApi接口的四种实现方法
在C#开发中,后台程序调用WebApi接口是常见的交互需求。本文将详细演示如何使用HttpWebRequest、HttpClient以及WebClient等核心类库,完成POST、GET、PUT、DELETE等常用HTTP请求,涵盖JSON数据的序列化处理与响应接收。
基于HttpWebRequest的请求实现
HttpWebRequest 是 .NET Framework 中传统的 HTTP 请求类,适用于需要精细控制请求头或兼容旧版本框架的场景。
第1步:执行POST请求
目的:向指定URL发送JSON数据并获取响应字符串。
- 入口:定义一个静态辅助方法
HttpPost。 - 参数:目标URL和待提交的JSON Body字符串。
- 动作:
- 创建
HttpWebRequest实例并指定 Method 为 "POST"。 - 设置 Content-Type 为
application/json。 - 将Body转换为UTF-8字节流,写入请求流。
- 读取响应流并返回文本结果。
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)。 - 动作:
- 使用
DataContractJsonSerializer将对象写入内存流。 - 重置内存流位置为 0。
- 包装为
StreamContent并设置头部类型为 JSON。 - 调用
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线程。
- 动作:
- 设置 RequestHeaders 和 Encoding。
- 订阅
DownloadStringCompleted事件处理回调。 - 调用
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编程的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













