当前位置: 首页 > news >正文

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

Flurl的使用介绍,摘自以下两篇博文:

https://www.cnblogs.com/myshowtime/p/14512563.html 

https://www.yisu.com/ask/19461416.html 

Flurl简介

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

下面是使用Flurl处理HTTP请求的步骤:

  1. 安装Flurl库:在Visual Studio中,打开NuGet包管理器控制台,并运行以下命令安装Flurl库:
Install-Package Flurl.Http
  1. 导入Flurl命名空间:在需要使用Flurl的代码文件中,导入Flurl命名空间:
using Flurl.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"
});

  1. 发送GET请求:使用Flurl的GetAsync()方法发送GET请求,并使用ReceiveJson()方法解析响应的JSON数据。例如:
var response = await "https://api.example.com/users"
.GetAsync()
.ReceiveJson();

  1. 发送POST请求:使用Flurl的PostJsonAsync()方法发送带有JSON数据的POST请求,并使用ReceiveJson()方法解析响应的JSON数据。例如:
var user = new { Name = "John", Age = 30 };
var response = await "https://api.example.com/users"
.PostJsonAsync(user)
.ReceiveJson();

  1. 发送PUT请求:使用Flurl的PutJsonAsync()方法发送带有JSON数据的PUT请求,并使用ReceiveJson()方法解析响应的JSON数据。例如:
var user = new { Name = "John", Age = 30 };
var response = await "https://api.example.com/users/1"
.PutJsonAsync(user)
.ReceiveJson();

  1. 发送DELETE请求:使用Flurl的DeleteAsync()方法发送DELETE请求,并使用ReceiveJson()方法解析响应的JSON数据。例如:
var response = await "https://api.example.com/users/1"
.DeleteAsync()
.ReceiveJson();

这些只是Flurl的一些基本用法,它还提供了许多其他功能,如处理文件上传、处理响应头、设置超时等。你可以查阅Flurl的文档了解更多信息:https://flurl.dev/

HttpClient 管理

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

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

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


http://www.mrgr.cn/news/58687.html

相关文章:

  • 000010 - Mapreduce框架原理
  • AI 开启财富密码:探索多元化赚钱之路
  • Codeforces Round 660 (Div. 2) D. Captain Flint and Treasure(图论建模,拓扑排序)
  • 计算广告第三版pdf
  • WeThinkIn | 从图像到视频:浅谈Video Diffusion Models背后的底层原理
  • 如何评估Mechanize和Poltergeist爬虫的效率和可靠性?
  • 2-133 基于matlab的粒子群算法PSO优化BP神经网络
  • hackme靶机渗透流程
  • 基础巩固:
  • ML2021Spring-hw1(COVID-19 Cases Prediction)
  • MacOS 使用ssh2-python报错ImportError: dlopen ... Library not loaded
  • 视频AI系统工具:强大的图像识别和分析工具Google Cloud Vision API介绍
  • java高性能处理10G大文件
  • 7、哈希表
  • C#从零开始学习(用户界面)(unity Lab4)
  • 软考:缓存击穿和缓存穿透
  • Vue 自定义指令 Directive 的高级使用与最佳实践
  • 线程池——Java
  • Redis和MySQL如何保证数据一致性
  • 洛谷 P1130 红牌
  • 鸿蒙UI系统组件17——富文本展示(RichText)
  • 批量归一化(Batch Normalization)
  • Python爬虫教程:从入门到精通
  • 考研要求掌握的C语言程度(堆排序)1
  • 【数据结构初阶】二叉树---堆
  • 总结性标题:高效导入文本数据,探索 MySQL 与 Java 的最佳实践