首页 > 其他分享 >.NET6之MiniAPI(二十二):HttpClient

.NET6之MiniAPI(二十二):HttpClient

时间:2022-11-29 20:56:55浏览次数:44  
标签:MiniAPI app async var NET6 HttpClient builder 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=桂素伟");
    }
}
  想要更快更方便的了解相关知识,可以关注微信公众号 

 

 

标签:MiniAPI,app,async,var,NET6,HttpClient,builder,httpClient
From: https://www.cnblogs.com/axzxs2001/p/16936647.html

相关文章

  • .NET6之MiniAPI(二十二):HttpClient
    说明:本篇不是说明HttpClient怎么使用,而以分享在asp.netcoreminiapi框架下,HttpClient的引入和使用方式。我们在业务开发中,免不了调用三方的服务,这时就会用到Htt......
  • .NET6之MiniAPI(二十一):限流
    限流,可以网络的基础设施进行配置实现,也可以在网关的地方进行限流,但服务本身的限流也不可或缺,因为当多副本时,一个副本故障,流量对于其他副本来说会提高,如果超过其承受请求量......
  • .NET6之MiniAPI(二十一):限流
    限流,可以网络的基础设施进行配置实现,也可以在网关的地方进行限流,但服务本身的限流也不可或缺,因为当多副本时,一个副本故障,流量对于其他副本来说会提高,如果超过其承受请求量......
  • .NET6之MiniAPI(十九):NLog
    在本系例文章的第八篇中,我们聊过官方的日志实现,即《.NET6之MiniAPI(八):日志》。但官方的日志功能更多是提供了一个实现基础,对于要求一个灵活,强大,方便的日志体系,官方的还是......
  • .NET6之MiniAPI(二十):实体验证FluentValidation
    为了验证apipost上来的数据的有效性,我们可以引入FluentValidation(详见https://fluentvalidation.net)。在asp.netmvc中,使用的是模型验证,通过在实体类上添加特性达到......
  • .NET6之MiniAPI(二十):实体验证FluentValidation
    为了验证apipost上来的数据的有效性,我们可以引入FluentValidation(详见https://fluentvalidation.net)。在asp.netmvc中,使用的是模型验证,通过在实体类上添加特性达到......
  • .NET6之MiniAPI(十九):NLog
    在本系例文章的第八篇中,我们聊过官方的日志实现,即《.NET6之MiniAPI(八):日志》。但官方的日志功能更多是提供了一个实现基础,对于要求一个灵活,强大,方便的日志体系,官方的还是有......
  • Net6 CodeFirst注入MySQL数据库上下文
    十年河东,十年河西,莫欺少年穷学无止境,精益求精 2022太难了,好多公司倒闭,互联网不景气,工作难找,苏州的C#/Net程序员的招聘更是少之又少,java,C,等其他语言也是供大于求,总之,难上......
  • .NET6之MiniAPI(十七):缓存
    缓存是空间换时间的一种做法,可以有效的提升响应时间,asp.netcore引入了本地内存缓存和分布式缓存。先看一下本地内存缓存:usingMicrosoft.Extensions.Caching.M......
  • .NET6之MiniAPI(十七):缓存
    缓存是空间换时间的一种做法,可以有效的提升响应时间,asp.netcore引入了本地内存缓存和分布式缓存。先看一下本地内存缓存:usingMicrosoft.Extensions.Caching.M......