在 .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操作变得更简单易用,你可以在项目中尝试使用它,其他的还有一些功能,可测试可配置等,你都可以在官网找到它的文档。
欢迎扫码关注我们的公众号 【全球技术精选】,专注国外优秀博客的翻译和开源项目分享。

在 .NET 中使用 Flurl 高效处理Http请求的更多相关文章
- 在Python中使用lambda高效操作列表的教程
在Python中使用lambda高效操作列表的教程 这篇文章主要介绍了在Python中使用lambda高效操作列表的教程,结合了包括map.filter.reduce.sorted等函数,需要的朋友可 ...
- jQuery中ajax的4种常用请求方式
jQuery中ajax的4种常用请求方式: 1.$.ajax()返回其创建的 XMLHttpRequest 对象. $.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数 ...
- js中ajax如何解决跨域请求
js中ajax如何解决跨域请求,在讲这个问题之前先解释几个名词 1.跨域请求 所有的浏览器都是同源策略,这个策略能保证页面脚本资源和cookie安全 ,浏览器隔离了来自不同源的请求,防上跨域不安全的操 ...
- iOS实现OAuth2.0中刷新access token并重新请求数据操作
一.简要概述 OAuth2.0是OAuth协议的下一版本,时常用于移动客户端的开发,是一种比较安全的机制.在OAuth 2.0中,server将发行一个短有效期的access token和长生命期的r ...
- (转)通过在 Page 指令或 配置节中设置 validateRequest=false 可以禁用请求验证
通过在 Page 指令或 配置节中设置 validateRequest=false 可以禁用请求验证 说明: 请求验证过程检测到有潜在危险的客户端输入值,对请求的处理已经中止.该值可能指示危及应用 ...
- EBS 开发中如何动态启用和禁止请求(Current Request)的参数
EBS 开发中如何动态启用和禁止请求(Current Request)的参数 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 我们可以使用依赖 ...
- Spring拦截器中通过request获取到该请求对应Controller中的method对象
背景:项目使用Spring 3.1.0.RELEASE,从dao到Controller层全部是基于注解配置.我的需求是想在自定义的Spring拦截器中通过request获取到该请求对应于Control ...
- jquery ajax 请求中多出现一次OPTIONS请求及其解决办法
http://www.tangshuang.net/2271.html 在上一篇<服务端php解决jquery ajax跨域请求restful api问题及实践>中,我简单介绍了如何通过服 ...
- Springboot中使用AOP统一处理Web请求日志
title: Springboot中使用AOP统一处理Web请求日志 date: 2017-04-26 16:30:48 tags: ['Spring Boot','AOP'] categories: ...
随机推荐
- DSC注册Agent失败- InternalServerError
问题 有大概5台Agent Server,注册的时候,发现2台可以成功,其他的不成功. 注册失败的错误日志如下: 初步尝试 首先,Pull Server已经平稳的运行了几年了,此次注册还有部分Agen ...
- K8S(07)交付实战-架构说明并准备zk集群
k8s交付实战-架构说明并准备zk集群 目录 k8s交付实战-架构说明并准备zk集群 1 交付的服务架构图: 1.1 架构图解 1.2 交付说明: 2 部署ZK集群 2.1 二进制安装JDK 2.1. ...
- woj1009 最短路 The Legend of Valiant Emigration
title: woj1009 最短路 The Legend of Valiant Emigration date: 2020-03-07 categories: acm tags: [acm,最短路, ...
- PAT L2-004. 这是二叉搜索树吗?【前序遍历转化为后序遍历】
一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大于等于该结点的键值: 其左右子树都是二叉搜索树. 所谓二叉搜索 ...
- Git使用出现Automatic merge failed; fix conflicts and then commit the result.解决方法
产生原因 首先这个问题产生的原因是因为你git pull 的时候会分为两步,第一步先从远程服务器上拉下代码,第二步进行merge,但是merge时候失败了就会产生上述问题. 解决方法: 丢弃本地提交, ...
- 微软大楼设计方案(中等) 推公式+RMQ问题
近日,微软新大楼的设计方案正在广泛征集中,其中一种方案格外引人注目.在这个方案中,大楼由 nn 栋楼组成,这些楼从左至右连成一排,编号依次为 11 到 nn,其中第 ii 栋楼有 h_ihi层. ...
- 力扣566. 重塑矩阵-C语言实现-简单题
题目 传送门 在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据. 给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要 ...
- Sentry React SourceMaps All In One
Sentry React SourceMaps All In One React https://docs.sentry.io/platforms/javascript/guides/react/ h ...
- how to create a style element in js (many ways)
how to create a style element in js (many ways) create style in js Constructed StyleSheets CSSStyleS ...
- window.locationbar
window.locationbar demo https://cdn.xgqfrms.xyz/#/operate-tool/select-seat-system/select-detail?temp ...