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. [BlockChain] 三方互惠是公共区块链得以发展的基石, dApp数字通证的运转需要可持续性玩法

    ------------------------------- 公链 旷工    开发者/用户 ------------------------------- -------------------- ...

  2. WPF 加载诡异的字体无法布局

    如果在系统里面存在诡异的字体,同时自己的 WPF 中有一个控件尝试使用这个字体放在界面中,那么将会在界面布局过程炸了,整个控件或者整个界面布局都无法继续 本文本来是由吕水大大发布的,但是他没空写,于是 ...

  3. 通过Ingress-nginx实现灰度发布---灰度发布(22)

    1.通过Ingress-nginx实现灰度发布 场景一: 将新版本灰度给部分用户 假设线上运行了一套对外提供 7 层服务的 Service A 服务,后来开发了个新版本 Service A' 想 要上 ...

  4. Fastbin attack&&Double free和Unsortbin leak的综合使用

    Fastbin attack&&Double free和Unsortbin leak的综合使用 今天做一个综合题目,包括利用Fastbin attack实现多指针指向一个地址,以及利用 ...

  5. SpringMVC学习三(静态资源/AJAX功能/乱码问题)

    静态资源的映射 Springmvc完成ajax功能 SpringMVC返回中文到ajax乱码问题解决方式 1.静态资源映射 对于之前web.xml配置文件中的 先做出如下更改,不可写"/*& ...

  6. Swift中Tuple的比较

    Swift中Tuple的比较遵循如下规则: 1 被比较的Tuple中包含的元素个数必须一样,并且对应元素的类型也必须一样: 2 比较的结果由整个Tuple的比较结果来决定.比如,如果是相等比较,那么必 ...

  7. 数据转换2-无人机航拍倾斜摄影转换成OSGB格式

    首先软件的下载和安装参考下面链接 http://www.xue51.com/soft/53013.html 0.首先打开软件,要打开2个哦. 打数据处理开后台 ContextCapture Engin ...

  8. SQL Server使用for xml path 多行合并成一行,逗号分隔,拆解分析实现原理

    我们写sql脚本处理数据的时候 针对部分数据进行group by 分组,分组后需要将部分数据放入分组后的行里面以逗号分隔. 举一个简单例子: 如上图的数据,需要对学生进行分组,取得学生都参与了哪些学科 ...

  9. Python 潮流周刊#51:用 Python 绘制美观的图表

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  10. [数字华容道] Html+css+js 实现小游戏

    [数字华容道] Html+css+js 实现小游戏 效果图 代码预览 在线预览地址 代码示例 <!DOCTYPE html> <html> <head> <m ...