今天大姚给大家分享一个.NET开源(MIT License)、免费、现代化、流畅、可测试、可移植的URL构建器和HTTP客户端库:Flurl。
项目介绍Flurl是一个集现代性、流畅性、异步性、可测试性、可移植性于一身的URL构建器与HTTP客户端库。它提供了简洁的API,使得HTTP请求的发送与URL的构建变得极为简单与直观。无论是构建复杂的URL路径,还是设置查询参数、请求头或认证信息,Flurl都能以几乎零学习成本的方式实现。
项目源代码
Flurl.Http 是一个构建在 Flurl 基础之上的 HTTP 客户端库。它提供了发送 HTTP 请求(GET、POST、PUT、DELETE 等)的简洁、流畅的 API:
Install-Package Flurl.HttpFlurl 是 Flurl.Http 的基础库,它主要关注于 URL 的构建和解析:
PM> Install-Package FlurlURL 构建器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 namevar 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优秀项目和框架精选该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没🤞)。
https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md