适用于 .NET 的现代化、流畅、可测试的HTTP客户端库:Flurl
前言
今天大姚给大家分享一个.NET开源(MIT License)、免费、现代化、流畅、可测试、可移植的URL构建器和HTTP客户端库:Flurl。
项目介绍
Flurl是一个集现代性、流畅性、异步性、可测试性、可移植性于一身的URL构建器与HTTP客户端库。它提供了简洁的API,使得HTTP请求的发送与URL的构建变得极为简单与直观。无论是构建复杂的URL路径,还是设置查询参数、请求头或认证信息,Flurl都能以几乎零学习成本的方式实现。
项目源代码
项目使用
安装项目NuGet包
Flurl.Http 是一个构建在 Flurl 基础之上的 HTTP 客户端库。它提供了发送 HTTP 请求(GET、POST、PUT、DELETE 等)的简洁、流畅的 API:
Install-Package Flurl.Http
Flurl 是 Flurl.Http 的基础库,它主要关注于 URL 的构建和解析:
Install-Package Flurl
URL 构建器
using Flurl;
var url = "https://some-api.com"
.AppendPathSegment("endpoint")
.SetQueryParams(new {
api_key = _config.GetValue<string>("MyApiKey"),
max_results = 20,
q = "I'll get encoded!"
})
.SetFragment("after-hash");
// result:
// https://some-api.com/endpoint?api_key=xxx&max_results=20&q=I%27ll%20get%20encoded%21#after-hash
"https://some-api.com".SetQueryParam("x", new[] { 1, 2, 3 }); // https://some-api.com?x=1&x=2&x=3
"https://some-api.com"
.AppendQueryParam("x", 1);
.AppendQueryParam("x", 2);
.AppendQueryParams("x", new[] { 3, 4 }); // https://some-api.com?x=1&x=2&x=3&x=4
模拟和记录HTTP请求
using Flurl;
using Flurl.Http;
var resultData = await "https://some-api.com"
.AppendPathSegment("endpoint")
.GetStringAsync();
var result = await "http://api.foo.com".PostJsonAsync(requestObj).ReceiveJson<T>();
var resultStr = await "http://api.foo.com/1".PatchJsonAsync(requestObj).ReceiveString();
var resultStr2 = await "http://api.foo.com/2".PutStringAsync("hello").ReceiveString();
var resp = await "http://api.foo.com".OptionsAsync();
await "http://api.foo.com".HeadAsync();
文件上传相关:
var resp = await "http://api.com".PostMultipartAsync(mp => mp
.AddString("name", "hello!") // individual string
.AddStringParts(new {a = 1, b = 2}) // multiple strings
.AddFile("file1", path1) // local file path
.AddFile("file2", stream, "foo.txt") // file stream
.AddJson("json", new { foo = "x" }) // json
.AddUrlEncoded("urlEnc", new { bar = "y" }) // URL-encoded
.Add(content)); // any HttpContent
下载文件:
// filename is optional here; it will default to the remote file name
var path = await "http://files.foo.com/image.jpg"
.DownloadFileAsync("c:\\downloads", filename);
处理超时错误:
try {
var result = await url.GetStringAsync();
}
catch (FlurlHttpTimeoutException) {
// handle timeouts
}
catch (FlurlHttpException) {
// handle error responses
}
项目源码地址
更多项目实用功能和特性欢迎前往项目开源地址查看👀,别忘了给项目一个Star支持💖。
- GitHub开源地址:https://github.com/tmenier/Flurl
- 在线文档地址:https://flurl.dev
优秀项目和框架精选
该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没🤞)。
DotNetGuide技术社区交流群
- DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目框架推荐、求职和招聘资讯、以及解决问题的平台。
- 在DotNetGuide技术社区中,开发者们可以分享自己的技术文章、项目经验、学习心得、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
- 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。