在 .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,一经查实,立即删除!

相关文章

java jdbc 删除_java使用jdbc实现各种类型添加删除修改数据

项目描述上次为大家分享了使用jdbc实现各种类型查询数据&#xff0c;这次为大家分享使用jdbc实现各种类型添加、删除、修改数据运行环境jdk8tomcat7mysql项目技术(必填)jdbcdao层数据库文件DROP TABLE IF EXISTS class;CREATE TABLE class (id int(11) NOT NULL auto_increment…

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

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

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

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

C# 在PC上的通过蓝牙(bluetooth)发送数据到手机

概述在PC端用.NET开发一个蓝牙下载的程序。实现在PC上查找周围的蓝牙设备&#xff08;主要是手机&#xff09;&#xff0c;并将PC上的文件通过蓝牙传输到手机上。目前我采用的是OpenNETCF.Net.Bluetooth&#xff0c;能够正常发现周围的蓝牙设备&#xff0c;手机也能够正常进行蓝…

新浪股票接口 java_新浪股票接口Android SDK(非官方)

新浪股票接口AndroidSDK昨天想到一个点子&#xff0c;需要访问股票行情。于是在网上搜了一下免费的股市行情的接口。发现新浪股票的数据接口比较稳定&#xff0c;于是就用它了。网上对于新浪股票的数据接口介绍比较详细&#xff0c;并且实现也很简单&#xff0c;所以花了一下午…

VC++的dll中接收消息

LRESULT CALLBACK MessageWinProc(HWND hwnd, // handle to windowUINT uMsg, // message identifierWPARAM wParam, // first message parameterLPARAM lParam // second message parameter)//用于处理消息窗口接收到的消息{switch(uMsg){case WM_CLOSE:DestroyW…

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

非常有用。下面五张图&#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;一般不同人同时看…

BeetleX.Http.Clients V1.5发布

组件开始设计是针对以接口的方式来定义HTTP/HTTPS访问&#xff0c;虽然基于接口来操作有很大的便利性&#xff0c;但定义起来就比较麻烦了。所以在1.5版本中实现了一个HttpClient类来简化调用。HttpClient 该类支持HTTP的GET,POST,DELETE和PUT操作&#xff0c;通过这几个…

java set spliterator_Java HashSet spliterator() 方法

Java HashSet spliterator() 方法spliterator() 用于在HashSet中的元素上创建后绑定和故障快速的Spliterator。将后期绑定的Spliterator绑定到元素的来源意味着HashSet在第一次遍历&#xff0c;第一次拆分或第一次查询估计大小时&#xff0c;而不是在创建Spliterator时。它可以…

系统的crontab设定:/etc/crontab

crontab -e 是针对用户的cron来设计的&#xff0c;如果是系统的例行性任务&#xff0c;该怎么办&#xff1f;是否还是需要以crontab -e来管理例行性命令&#xff1f;当然不需要&#xff0c;您只需要编辑/etc/crontab文件就可以了。需要注意的是&#xff1a;crontab -e的作用其实…

编程到底难在哪里?

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

DDD实战课--学习笔记

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

java 字符utf8编码_java字符串转utf8编码

Java中ASC码与字符互相转化_计算机软件及应用_IT/计算机_专业资料。Java 中 ASC 码与字符互相转化 packagecom.ljq.test; /** * Java 中 ASC 码与字符互相转化......JAVA 字符串转日期或日期转字符串(转) 2010-08-16 16:34:03| 分类: java |字号 订阅 JAVA 字符串转日期或日期转…

如何预测未来房价的发展

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…

java 最好 入门_C++和Java哪个比较好入门?初学者该如何选择?

选择好的方向比努力更重要&#xff0c;对于初学编程的人来说选择一门合适的编程语言关系到自己以后的职业发展。c和Java那个更适合作为入门语言?给大家简单科普一下~C语言它是正宗的C语言的嫡系&#xff0c;由C语言发展而来。C支持多种编程范式 --面向对象编程、泛型编程和过程…