Asp.net Core, 在我用过的多种Http REST 客户端:

RestSharp

WebApiClient

Refit

Flurl

中,Flurl可以说是最符合我口味的,用起来那可真的顺滑无比。

不过它因为出现的比较早,并没有使用asp.net core中的IHttpClientFactory 管理HttpClient实例,而是自己管理。一般是根据host来缓存一个HttpClient实例,比如你请求所有的https://www.baidu.com/ 都用一个缓存的实例,这样可能会有些问题,比如Dns更新等;

对于我们有着用IHttpClientFactory的执念,Flurl也是支持的:

简单写法

注入HttpClient

public void ConfigureServices(IServiceCollection services)
{
//... services.AddHttpClient(); //...
}

使用

private readonly IFlurlClient _flurlClient;

public CommonController(IHttpClientFactory httpClientFactory)
{
_flurlClient = new FlurlClient(httpClientFactory.CreateClient());
}

实战用法

添加api业务实体类

    public class TestFlurlHttpClient
{
private readonly IFlurlClient _flurlClient; public TestFlurlHttpClient(HttpClient httpClient)
{
_flurlClient = new FlurlClient(httpClient);
} public async Task<PassportUserModel> GetUserByPid(int pid)
{
var result = await _flurlClient.Request($"api/v1/member/user/getbypid?pid={pid}").GetJsonAsync<PassportApiResult<PassportUserModel>>();
return result.Data;
}
}

注入HttpClient

public void ConfigureServices(IServiceCollection services)
{
//... services.AddHttpClient<TestFlurlHttpClient>("memberclient", c =>
{
c.BaseAddress = new System.Uri("http://172.16.3.119:5001/");
}); //或
//services.AddHttpClient<ITestFlurlHttpClient,TestFlurlHttpClient>("memberclient", c =>
//{
// c.BaseAddress = new System.Uri("http://172.16.3.119:5001/");
//}); //...
}

使用

private readonly TestFlurlHttpClient _testFlurlHttpClient;

public CommonController(TestFlurlHttpClient testFlurlHttpClient)
{
_testFlurlHttpClient = testFlurlHttpClient;
}

如丝顺滑,谁用谁知道;

了解更多还是看文档吧 : https://flurl.dev/docs

Asp.net Core Flurl.Http 结合IHttpClientFactory管理HttpClient生命周期的更多相关文章

  1. ASP.NET Core 2 学习笔记(二)生命周期

    要了解程序的运行原理,就要先知道程序的进入点及生命周期.以往ASP.NET MVC的启动方式,是继承 HttpApplication 作为网站开始的进入点,而ASP.NET Core 改变了网站的启动 ...

  2. 在Asp.net Core中使用中间件来管理websocket

    介绍 ASP.NET Core SignalR是一个有用的库,可以简化Web应用程序中实时通信的管理.但是,我宁愿使用WebSockets,因为我想要更灵活,并且与任何WebSocket客户端兼容. ...

  3. 在 ASP.NET Core 项目中使用 npm 管理你的前端组件包

    一.前言 在项目的前端开发中,对于绝大多数的小伙伴来说,当然,也包括我,不可避免的需要在项目中使用到一些第三方的组件包.这时,团队中的小伙伴是选择直接去组件的官网上下载,还是图省事直接在网上搜索,然后 ...

  4. 在Asp.NET Core中如何优雅的管理用户机密数据

    在Asp.NET Core中如何优雅的管理用户机密数据 背景 回顾 在软件开发过程中,使用配置文件来管理某些对应用程序运行中需要使用的参数是常见的作法.在早期VB/VB.NET时代,经常使用.ini文 ...

  5. Android-管理Activity生命周期 -重新创建Activity

    按照正常的app行为,很少情况下activity会销毁,只有当用户点击了返回按钮或者activity通过调用finish()发出销毁信号.系统也有可能销毁activity如果它是停止状态并且很久没有使 ...

  6. Android-管理Activity生命周期 -停止和重启Activity

    停止和重启activity在activity的生命周期中很重要,它能让用户感觉你的app总是激活的而且不会丢失他们的进度.activity在下面的这些情况会停止和重启: 用户打开常用app窗口然后从你 ...

  7. Android-管理Activity生命周期 -暂停和恢复一个Activity

    在正常的使用app时,前台的activity有时候会被可见的组件阻塞导致activity暂停.比如,当打开一个半透明的activity(就像打开了一个对话框),之前的activity就会暂停.只要ac ...

  8. Android-管理Activity生命周期 -开始一个Activity

    很多程序都是从main()方法开始启动的,和其他程序不同,android是在activity生命周期的特定状态的特定回调方法中初始化代码的.activity启动和销毁的时候都用很多回调方法. 这里将要 ...

  9. ASP.NET Core中如何针对一个使用HttpClient对象的类编写单元测试

    原文地址: How to unit test a class that consumes an HttpClient with IHttpClientFactory in ASP.NET Core? ...

  10. ASP.NET CORE 2.* 利用集成测试框架覆盖HttpClient相关代码

    ASP.NET CORE 集成测试官方介绍 我的asp.net core 项目里面大部分功能都是去调用别人的API ,大量使用HttpClient,公司单元测试覆盖率要求95%以上,很难做到不mock ...

随机推荐

  1. [GPT] vue 的 quasar 框架 在 layout 模版中 如何获取 子页面当前使用的 useMeta

      在 Quasar 框架中,用 Vue Router 的 meta 字段来获取子页面当前使用的 useMeta . 首先,您需要在路由配置中设置子页面的 meta 字段.例如: const rout ...

  2. PHP vs Golang ? 想什么呢 ! What Are You Thinking !

    在使用 PHP 多年之后,我对 PHP 的优势和劣势已经非常清楚,与后起之秀 Golang 相比,两者已经不在一个重量级. PHP 更像是 70 kg 级别的选手,脚本语言,极速开发,部署方便,性能可 ...

  3. WPF 已知问题 资源字典树引用与资源寻找的坑

    大家都知道,在 WPF 里面,可以让资源字典合并其他资源字典,从而定义出资源字典引用树.然而在资源字典引用树里面,如果没有理清关系,将可以作出一个超级复杂的引用关系网.如果在性能优化中,将网断开部分, ...

  4. SAP集成技术(八)成熟度模型

    成熟度模型的目的在于使用模型和标准来评估当前的集成能力,并确定必须建立哪些能力,以达到期望的成熟度级别. 成熟度级别描述了一个特定主题复杂性对于某种方法或模型的成熟度.基于定义的需求和标准的分类,得出 ...

  5. ViewPager引导页实现网络图片加载

    ViewPager引导页实现网络图片加载 最近在准备移动应用开发的比赛,看到一道题目,让我们加载网络图片当引导页,我太久没做了,就搜了一下,大多数是让你有多少张图片就新建多少个布局文件,这样文件多不说 ...

  6. 使用openvp*-gui客户端连接多服务端,作为Windows服务部署

    背景 多数公司都会用到VPN隧道技术链接服务器,保证服务器的安全,但多数情况下会存在多服务端的情况,这时就有客户端连接多个服务端的必要了,如果每次都要切换配置的话,对于有强迫症的兄弟当然忍不了了 思考 ...

  7. 【停用词】NLP中的停用词怎么获取?我整理了6种方法

    目录 一.停用词介绍 二.停用词应用场景 2.1 提取高频词 2.2 词云图 三.停用词获取方法 3.1 自定义停用词 3.2 用wordcloud调取停用词 3.3 用nltk调取停用词 3.3.1 ...

  8. GitLab 管理 NuGet 包

    1 概览 在服务器上构建项目时,需要引用 nuget.org 之外的包,如公司内部开发的.第三方未发布到 nuget.org 上的.怎么办? GitLab 提供了 Package Registry 来 ...

  9. 关于小说阅读前端翻页插件推荐turn.js

    http://www.turnjs.com

  10. AIRIOT物联网低代码平台如何配置三菱PLC驱动?

    三菱PLC驱动配置使用三菱Melsec协议(MC协议)从三菱PLC读取数据,仅支持以太网方式.三菱PLC都可以通过此协议访问,但是需要对PLC进行设置. AIRIOT物联网低代码平台如何配置三菱PLC ...