在 .NET 中使用 Flurl 高效处理Http请求

简介

官方介绍,Flurl是一个现代的,流利的,支持异步的,可测试的,可移植的,URL增强和Http客户端组件。

Url构建

现在有一个登录的接口,地址如下:

https://www.some-api.com/login?name=Lee&pwd=123456

我们在处理这个地址的时候,会拼接 login,然后拼接?号,然后拼接参数,中间还要拼接& 得到最终的地址。

使用 Flurl 构建,首先需要通过 Nuget 安装 Flurl 组件。

 var url = "http://www.some-api.com".AppendPathSegment("login").SetQueryParams(new{name = "Lee",pwd = "123456" });

这很简单,这是最简单的Get请求,同样的我们也可以使用 Uri 的扩展方法

var url = new Uri("http://www.some-api.com").AppendPathSegment(...

Http 增强

Flurl 是模块化的,所以还需要安装 Flurl.Http

using Flurl;
using Flurl.Http;var result = await "http://www.some-api.com".AppendPathSegment("login").GetAsync();

上面的代码会发送一个GET请求,并返回一个IFlurlResponse,可以得到 StatusCode,Headers等,也可以通过 GetStringAsync 和 GetJsonAsync 得到响应内容。

如果只是想获取响应内容,我们看看 Flurl 有多简单:

T poco = await "http://api.foo.com".GetJsonAsync<T>();
string text = await "http://site.com/readme.txt".GetStringAsync();
byte[] bytes = await "http://site.com/image.jpg".GetBytesAsync();
Stream stream = await "http://site.com/music.mp3".GetStreamAsync();

Post提交

await "http://api.foo.com".PostJsonAsync(new { a = 1, b = 2 });

动态类型 dynamic

dynamic d = await "http://api.foo.com".GetJsonAsync();

设置请求标头:

await url.WithHeader("Accept", "text/plain").GetJsonAsync();await url.WithHeaders(new { Accept = "text/plain", User_Agent = "Flurl" }).GetJsonAsync();

基础身份验证

await url.WithBasicAuth("username", "password").GetJsonAsync();

OAuth 2.0

await url.WithOAuthBearerToken("mytoken").GetJsonAsync();

表单提交

await "http://site.com/login".PostUrlEncodedAsync(new { user = "user", pass = "pass"
});

HttpClient 管理

我们通常不会创建太多的 HttpClient, 过多的连接会耗尽服务器资源,通常会抛出 SocketException 异常,大部分还是使用 HttpClientFactory。

在 Flurl 库中,它是内部管理 HttpClient实例, 通常一个主机Host,会创建一个HttpClient,然后缓存来复用。

Flurl 也很好的支持了IOC容器,你也可以在依赖注入中使用它。

总结

Flurl 组件让Http操作变得更简单易用,你可以在项目中尝试使用它,其他的还有一些功能,可测试可配置等,你都可以在官网找到它的文档。

欢迎扫码关注我们的公众号 【全球技术精选】,专注国外优秀博客的翻译和开源项目分享。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像还可以这样玩!如何用波的算法处理图像

我对图像处理一直很感兴趣&#xff0c;曾经写过好几篇博客。前几天读到一篇文章&#xff0c;它提到图像其实是一种波&#xff0c;可以用波的算法处理图像。我顿时有一种醍醐灌顶的感觉&#xff0c;从没想到这两个领域是相关的&#xff0c;图像还可以这样玩&#xff01;下面我就…

[存档]CxServer的项目周期管理

2019独角兽企业重金招聘Python工程师标准>>> 主题&#xff1a;大学生创新性实验计划 项目周期管理 作者&#xff1a;宋志民备注&#xff1a;本文为《 基于CxServer的大学生科学研究项目管理实践探索》的一部分 内容&#xff1a; 一般情况下大学生科研计划的种类较多…

在职场中,长得漂亮真的有用吗?

非常有用。下面五张图&#xff0c;每张图介绍一个研究&#xff0c;都可以从一个侧面回答问题。01 企业对求职者的颜值有多看重&#xff1f;这张图来自两位学者对国内某网站超过100万份招聘广告的分析结果。总的来看&#xff0c;有7.7%的企业会对应聘者的外貌提出要求&#xff0…

TIOBE 3月榜单:新功能将加入,C语言仍高居榜首

喜欢就关注我们吧&#xff01;TIOBE 公布了 2021 年 3 月的编程语言排行榜。本月 TIOBE 指数没有什么有趣的变化。因此&#xff0c;TIOBE CEO Paul Jansen 表示&#xff0c;其打算透露一些近期将加入至榜单中的新功能。第一个问题涉及到一个 bug 修复。由于使用了复杂的算法&am…

java jdk win10安装_Java 安装 JDK WIN10

JDK的全称是Java SE Development Kit它的官方网站只要用Goole搜索下即可找到&#xff0c;官方提供JDK8、11、12的下载入口。我们点击Java SE Development Kit 8进入下载。我们下载的版本是jdk-8u91-windows-x64.exe安装过程按导向默认安装&#xff0c;中途什么选项都不改。安装…

twitter达人不能不知的缩写

今天上午有人在新闻编辑室问“嘿&#xff0c;Twitter上的MT是什么意思&#xff1f;”&#xff0c;让我们觉得编制一个Twitter缩写的列表可能会有帮助。 这就是为什么我们要做这些的原因。想要全面地完成其实不容易&#xff0c;所以请在评论中增加这个列表中缺失的缩写吧。技术类…

50张神图……好不容易才找到完整版!

描述&#xff1a;1.耶鲁大学耗时5年的研究成果。 如果你看见这个舞女是顺时针转&#xff0c;说明你用的是右脑 如果是逆时针转&#xff0c;说明你用的左脑。 据说&#xff0c;14%的美国人可以两个方向都能看见 可以和别人一起看&#xff0c;测试下&#xff0c;一般不同人同时看…

编程到底难在哪里?

写在前面&#xff1a;这篇回答并不是讲述在生活中程序员如何买苹果&#xff0c;而是以买苹果为例说明程序员如何解决问题。程序员需要对问题进行透彻的分析&#xff0c;理清其涉及的所有细节&#xff0c;预测可能发生的所有意外与非意外的情况&#xff0c;列出解决方案的所有步…

DDD实战课--学习笔记

目录学好了DDD&#xff0c;你能做什么&#xff1f;领域驱动设计&#xff1a;微服务设计为什么要选择DDD&#xff1f;领域、子域、核心域、通用域和支撑域&#xff1a;傻傻分不清&#xff1f;限界上下文&#xff1a;定义领域边界的利器实体和值对象&#xff1a;从领域模型的基础…

如何预测未来房价的发展

1946年2月16日&#xff0c;是一个值得纪念的日子。在这一天&#xff0c;人类历史上真正意义上的第一台电子计算机诞生了&#xff0c;此后计算机便随着科技的发展以强大的生命力飞速发展着。而作为用来定义计算机程序的形式语言——编程语言也紧跟计算机其后蓬勃发展&#xff0c…

《进击吧!Blazor!》系列入门教程 第一章 7.图表

作者备注《进击吧&#xff01;Blazor&#xff01;》是本人与张善友老师合作的Blazor零基础入门系列视频&#xff0c;此系列能让一个从未接触过Blazor的程序员掌握开发Blazor应用的能力。视频地址&#xff1a;https://space.bilibili.com/483888821/channel/detail?cid151273Bl…

一日一技:ASP.NET Core Api网关Ocelot初探

概述Ocelot面向使用.NET运行微型服务/面向服务的体系结构的人员&#xff0c;这些体系结构需要在系统中具有统一的入口点。特别是我想与IdentityServer参考和承载令牌轻松集成。Ocelot是按特定顺序排列的一堆中间件。Ocelot将HttpRequest对象操作到由其配置指定的状态&#xff0…

盘点那些让程序员目瞪口呆的Bug都有什么?

程序员一生与bug奋战&#xff0c;可谓是杀敌无数&#xff0c;见怪不怪了&#xff01;在某知识社交平台中&#xff0c;一个“有哪些让程序员目瞪口呆的bug”的话题引来了6700多万的阅读&#xff0c;可见程序员们对这个话题的敏感度有多高。1、麻省理工“只能发500英里的邮件”该…

这本 “写不完” 的黑科技笔记本,恐怕要颠覆整个行业!

这是一本可以“阅后即焚”的笔记本&#xff1f;别想太多这个“焚”不是那个“焚”哦~TA非常神奇&#xff01;风筒吹吹&#xff0c;笔记本上字迹都会自动消失。what&#xff1f;&#xff08;暂时保密&#xff0c;一会见证奇迹&#xff09;每个人在步入学生时代&#xff0c;到社会…

.NET 6 Preview 2 发布

前言在 2021 年 3 月 11 日&#xff0c; .NET 6 Preview 2 发布&#xff0c;这次的改进主要涉及到 MAUI、新的基础库和运行时、JIT 改进。.NET 6 正式版将会在 2021 年 11 月发布&#xff0c;支持 Windows、macOS、Linux、Android 和 iOS 等系统以及 x86、x86_64、ARM 和 ARM64…

[转]ArcGIS.Server.9.3和ArcGIS API for Flex实现Toolbar功能(四)

目的&#xff1a;1.ArcGIS API for Flex实现Toolbar功能&#xff0c;包括ZoomIn、ZoomOut、Pan、PrevExtent、NextExtent、FullExtent功能。准备工作&#xff1a;1.这次地图数据就用Esri提供的http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/Ma…

物理学家史蒂夫·霍金逝世,享年76岁(附图文回顾他的一生)

3月14日消息&#xff0c;据英国天空新闻等多家媒体报道&#xff0c;史蒂芬威廉霍金&#xff08;Stephen William Hawking&#xff09;去世&#xff0c;享年76岁&#xff08;1942年1月8日&#xff0d;2018年3月14日&#xff09;。这一消息已经得到霍金家人确认。霍金的三个孩子露…

mysql数据库熟悉表空间数据文件_Oracle表空间和数据文件

Oracle创建表空间 1.创建普通表空间create tablespace oracle_tablespacedatafileOracle创建表空间1.创建普通表空间create tablespace oracle_tablespacedatafile /home/oracle/oradata/orcl/oracle_tablespace.dbfsize 100mautoextend on next 10M maxsize 200Mextent manage…

2018年最值得关注的15大技术趋势,区块链将得到更广泛的应用

通常情况下&#xff0c;技术趋势是很难准确预测的&#xff0c;因为预测未来本身就极其困难。但是我们还是可以从过往的一些显著数据指标来推测新的一年里科技行业的发展趋势。2018&#xff0c;有哪些值得关注的技术趋势&#xff1f;01 区块链将得到更广泛的应用

Visual Studio项目引用出现感叹号怎么办?

原因可能有多种&#xff1a;第一种问题&#xff1a;解决方式1&#xff1a;今天换了台电脑&#xff0c;就把笔记本上的项目拷贝到了台式机上&#xff0c; 但是我没有拷贝解决方案整个文件夹&#xff0c;因为其中项目太多了&#xff0c;我就把其中一个项目的文件夹直接拷贝到电脑…