.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=桂素伟");
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值