.NET6之MiniAPI(二十二):HttpClient
说明:本篇不是说明HttpClient怎么使用,而以分享在asp.net core mini api框架下,HttpClient的引入和使用方式。
我们在业务开发中,免不了调用三方的服务,这时就会用到HttpClient,在早期的asp.net core框架中,一般是通过new HttpClient来实现对三方的请求,现在,可以通过HttPClientFactory来实现,这样的好处是可以池化连接,节省资源。
基础使用方法很简单:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHttpClient();
var app = builder.Build();
app.MapGet("/test", async (IHttpClientFactory clientFactory) =>
{
var client = clientFactory.CreateClient();
var content = await client.GetStringAsync("https://www.google.com");
});
app.Run();
当项目中有多个三方服务请求,为了区分各个三方服务,可以采用命名方式
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHttpClient("Google", httpClient =>
{
httpClient.BaseAddress = new Uri("https://www.google.com/");
});
builder.Services.AddHttpClient("BaiDu", httpClient =>
{
httpClient.BaseAddress = new Uri("https://www.baidu.com/");
});
var app = builder.Build();
app.MapGet("/testgoogle", async (IHttpClientFactory clientFactory) =>
{
var googleClient = clientFactory.CreateClient("Google");
return await googleCclient.GetStringAsync("search?q=桂素伟");
});
app.MapGet("/testbaidu", async (IHttpClientFactory clientFactory) =>
{
var baiduClient = clientFactory.CreateClient("BaiDu");
return await lient .GetStringAsync("s?wd=桂素伟");
});
app.Run();
还可以项目中每个服务的请求各自封装,各用各的HttpClient:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHttpClient<IGoogleService, GoogleService>();
builder.Services.AddHttpClient<IBaiDuService, BaiDuService>(httpClient =>
{
httpClient.BaseAddress = new Uri("https://www.baidu.com/");
});
var app = builder.Build();
app.MapGet("/testgoogle", async (IGoogleService google) =>
{
return await google.GetContentAsync();
});
app.MapGet("/testbaidu", async (IBaiDuService baidu) =>
{
return await baidu.GetContentAsync();
});
app.Run();
interface IGoogleService
{
Task<string> GetContentAsync();
}
class GoogleService : IGoogleService
{
private readonly HttpClient _httpClient;
public GoogleService(HttpClient httpClient)
{
_httpClient = httpClient;
_httpClient.BaseAddress = new Uri("https://www.google.com/");
}
public async Task<string> GetContentAsync()
{
return await _httpClient.GetStringAsync("search?q=桂素伟");
}
}
interface IBaiDuService
{
Task<string> GetContentAsync();
}
class BaiDuService : IBaiDuService
{
private readonly HttpClient _httpClient;
public BaiDuService(HttpClient httpClient)
{
_httpClient = httpClient;
}
public async Task<string> GetContentAsync()
{
return await _httpClient.GetStringAsync("s?wd=桂素伟");
}
}
想要更快更方便的了解相关知识,可以关注微信公众号

****欢迎关注我的asp.net core系统课程****
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下