说明:本篇不是说明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=桂素伟");}
}

.NET6之MiniAPI(二十二):HttpClient相关推荐

  1. .NET6之MiniAPI(三十):结束篇(附链接)

    不知不觉来到了<.NET6之MiniAPI>的第三十篇,回顾之前的篇幅,主要涉及如下: HTTP请求,应答 Request 桂素伟,公众号:桂迹.NET6之MiniAPI(二):reque ...

  2. (二十二)admin-boot项目之集成just-auth实现第三方授权登录

    (二十二)集成just-auth实现第三方授权登录 项目地址:https://gitee.com/springzb/admin-boot 如果觉得不错,给个 star 简介: 这是一个基础的企业级基础 ...

  3. 2021年大数据Hadoop(二十二):MapReduce的自定义分组

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 MapReduce的自定义分组 需求 分析 实现 第一步: ...

  4. 一位中科院自动化所博士毕业论文的致谢:二十二载风雨求学路,他把自己活成了光.........

    4月18日,中国科学院官方微博发布消息,披露了这篇论文为<人机交互式机器翻译方法研究与实现>,作者是2017年毕业于中国科学院大学的工学博士黄国平. 这篇论文中情感真挚的<致谢> ...

  5. iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2)

    iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2) 此时,当用户轻拍按钮后,一个叫tapButton()的方法就会被触发. 注意:以上这一种方式是动作声明和关联一起进行的,还有一种先 ...

  6. 实验二十二 SCVMM中的SQL Server配置文件

    实验二十二 SCVMM中的SQL Server配置文件 在VMM 2012中管理员可以使用 SQL Server 配置文件,在部署完成虚拟机之后,实现 SQL Server 数据库服务自动化部署并交付 ...

  7. 插入DLL和挂接API——Windows核心编程学习手札之二十二

    插入DLL和挂接API --Windows核心编程学习手札之二十二 如下情况,可能要打破进程的界限,访问另一个进程的地址空间: 1)为另一个进程创建的窗口建立子类时: 2)需要调试帮助时,如需要确定另 ...

  8. OpenCV学习笔记(二十一)——绘图函数core OpenCV学习笔记(二十二)——粒子滤波跟踪方法 OpenCV学习笔记(二十三)——OpenCV的GUI之凤凰涅槃Qt OpenCV学习笔记(二十

    OpenCV学习笔记(二十一)--绘图函数core 在图像中,我们经常想要在图像中做一些标识记号,这就需要绘图函数.OpenCV虽然没有太优秀的GUI,但在绘图方面还是做得很完整的.这里就介绍一下相关 ...

  9. 读书二十二载,信念很简单,把书念下去,然后走出去,不枉活一世。

    ‍ ‍ 关注+星标公众号,不错过精彩内容 昨天看了一篇关于博士论文的致谢,看的我想哭.改变命运有很多条路,但是对于大多数人而言,读书是改变命运的捷径. 内容是讲述了自己20多年的求学经历:小时候煤油灯 ...

  10. (原创)无废话C#设计模式之二十二:总结(针对GOF23)

    无废话C#设计模式之二十二:总结(针对GOF23) 比较 设计模式 常用程度 适用层次 引入时机 结构复杂度 Abstract Factory 比较常用 应用级 设计时 比较复杂 Builder 一般 ...

最新文章

  1. Python用requests完成最简单的爬虫
  2. Tomcat启动一闪而过
  3. boost::hana::detail::unpack_flatten用法的测试程序
  4. 百(垃)度(圾)之星初赛B hdu6114
  5. c# 中关键字_C#中的“使用”关键字
  6. hadoop 集群启动时 Address already in use 解决方法
  7. 学习之路>>负载均衡
  8. java rf14bug_hadoop2.7.0集群,使用中遇到的bug及解决办法
  9. 青海师大c语言研究生专业课_【考研资讯】多所高校更改专业课科目!考研人还能再怎么惨?...
  10. 转 windows查看端口占用命令
  11. IBM语音识别能力逼近人类水平,获深度学习巨头Yoshua Bengio盛赞
  12. Delphi中怎么结束线程(这个线程是定时执行的)(方案一)
  13. linux像win7,如何使Ubuntu看起来像Windows 7
  14. 红帽子linux拨号上网,centos6.5宽带拨号上网的方法
  15. 《一个供应链项目经理谈项目心得体会》读后感
  16. 高集成AX6800x USB KVM多电脑切换器单片机解决方案介绍视频
  17. 双系统linux触摸板不能用,windows系统与ubuntu双系统导致笔记本触摸板失灵的解决办法(非输入代码)...
  18. OutputStreamWriter Writer PrintWriter
  19. plsql相同变量高亮显示
  20. 老路用得上的商学课-81-100学习(读书)笔记

热门文章

  1. CentOS 搭建Postfix+Dovecot简单邮件系统
  2. artDialog ( v 6.0.2 ) content 参数引入页面 html 内容
  3. nagios-3.4.3搭建
  4. java中main函数解析
  5. C#摄像头实现拍照功能的简单代码示例
  6. 第二天:装饰模式及面向对象设计原则4则
  7. snmp服务中snmpwalk命令常用方法总结
  8. webpack二(以webpack4.x起步)
  9. 关于jstl.jar引用问题及解决方法
  10. [蓝桥杯] 蚂蚁感冒