简介

官方介绍,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操作变得更简单易用,你可以在项目中尝试使用它,其他的还有一些功能,可测试可配置等,你都可以在官网找到它的文档。

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

最新文章

  1. Python swapcase()方法
  2. PHP $_FILES中error返回值详解
  3. Hadoop阅读笔记(五)——重返Hadoop目录结构
  4. 使用ajax提交form表单,包括ajax文件上传
  5. C#中treeview的问题,如何区分根节点和子节点以及根节点和根节点的兄弟节点?
  6. Linux学习1——首次登录
  7. Lucene4.3入门
  8. 阅读MDN文档之基本盒模型(三)
  9. O(1)空间内实现矩阵转置
  10. Saiku根据入参日期查询出对应的数据(二十)
  11. js中文编码到C#后台解码
  12. Oracle数据库基础入门《二》Oracle内存结构
  13. LibreOJ #6014. 「网络流 24 题」最长 k 可重区间集
  14. js == 与 === 的区别[转]
  15. 利用.frm、.ibd恢复数据
  16. Python递归优化方法
  17. 机器学习 之k-means和DBSCAN的区别
  18. iOS APP版本更新跳转到App Store下载/更新方法
  19. 在oracle的连接(join)中使用using关键字
  20. @transient加在属性前的作用

热门文章

  1. 一文带你认识Docker
  2. 功能按钮发post请求 参数放入body中
  3. 9. Lock wait timeout exceeded
  4. apt 和 apt-get 之间有什么区别?
  5. Steam 钓鱼模拟器
  6. js 增加数组的嵌套层数
  7. 如何理解NGK的Layer2-侧链?
  8. 11_MySQL如何让数据分页显示
  9. 09_MySQL数据库的索引机制
  10. Zookeeper从入门到删库跑路