使用HttpClient代替WebClient
前言
有一个项目是从.NetFramework迁移到.Net 9了,在编译的时候,发现有一个警告信息: warning SYSLIB0014: “WebClient.WebClient()”已过时:“WebRequest, HttpWebRequest, ServicePoint, and WebClient are obsolete. Use HttpClient instead.WebClient这个我在项目中很少使用,上一次使用,感觉至少是10年前,那应该是.Net 4.0之前的项目了,当时的项目比较老,好像当时是写一个ActiveX插件,一次下载多个图片文件.
WebClient是封装WebRequest,使用更简单,在.Net Framework 4.5之后,就建议使用它了,所以在.Net Core及其后面的版本(尤其是会升级版.Net版本的项目),就不要使用WebClient和WebRequest.因为已经标记弃用了,可能会在某一个版本移除.
WebClient请求代码
var entity = new
{
FirstName = "Jim",
LastName = "Tom",
Age = 20
};
var json = JsonSerializer.Serialize(entity);
var buffer = Encoding.UTF8.GetBytes(json);
var url = "http://localhost:5215/api/user/create"; //请求地址
//使用WebClient 做Http Post请求
WebClient webClient = new WebClient();
webClient.Headers.Add("Content-Type", "application/json");
var uploadResult = webClient.UploadData(url, buffer);
var result = Encoding.UTF8.GetString(uploadResult);
Console.WriteLine(result);使用HttpClient代替WebClient
var entity = new
{
FirstName = "Jim",
LastName = "Tom",
Age = 20
};
var json = JsonSerializer.Serialize(entity);
//如果在客户端使用的,尽量使用静态单例,这里只是为了测试
//如果是在Asp.Net Core使用IHttpClientFactory注入的方式获取实例
HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("http://localhost:5215");
var content = new StringContent(json, Encoding.UTF8, "application/json");
var httpResponseMessage = await httpClient.PostAsync("/api/user/create", content);
if (httpResponseMessage.StatusCode == System.Net.HttpStatusCode.OK)
{
var responseResult = await httpResponseMessage.Content.ReadAsStringAsync();
Console.WriteLine(responseResult);
}测试Server项目
测试的Server项目这里是使用的FastEndPoints,如果是小项目使用还是比较好的,因为FastEndpoints集成了EventBus(事件总线)/JobQueue(任务队列,异步处理某些任务)等组件,也容易上手,使用还比较很方便,性能与Asp.Net Core Minimal相差不大,比Asp.Net Core MVC要好,如果是大项目和多人开发的话,建议使用ABP.using FastEndpoints;
public class MyEndpoint : Endpoint<MyRequest, MyResponse>
{
public override void Configure()
{
Post("/api/user/create");
AllowAnonymous();
}
public override async Task HandleAsync(MyRequest req, CancellationToken ct)
{
await Send.OkAsync(new()
{
FullName = $"{req.FirstName} {req.LastName}",
IsOver18 = req.Age > 18
}, ct);
}
}
秋风
2025-10-12
