首页 > 其他分享 >适用于 .NET 的现代化、流畅、可测试的HTTP客户端库:Flurl

适用于 .NET 的现代化、流畅、可测试的HTTP客户端库:Flurl

时间:2024-07-21 10:29:10浏览次数:7  
标签:HTTP api Flurl https NET com

适用于 .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
}

项目源码地址

更多项目实用功能和特性欢迎前往项目开源地址查看

标签:HTTP,api,Flurl,https,NET,com
From: https://www.cnblogs.com/Leo_wl/p/18314224

相关文章

  • .NET C# 配置 Options
    .NETC#配置Options使用options模式可以带来许多好处,包括清晰的配置管理、类型安全、易于测试和灵活性。但在使用过程中,也需要注意配置复杂性、性能开销和依赖框架等问题。通过合理设计和使用,可以充分发挥options模式的优势,提高代码的可维护性和可靠性。文章目录......
  • https协议
    HTTPS(HypertextTransferProtocolSecure)协议是一种基于HTTP的安全通信协议,用于在计算机网络上安全地传输数据。它是在HTTP协议的基础上增加了SSL(安全套接层)或TLS(安全传输层协议)加密层,以确保数据在传输过程中的机密性、完整性和身份验证。以下是对HTTPS协议及其原理的详细......
  • NoneType 在链表中不可下标
    我正在开发一个基本推荐软件的组合项目,其中我收集用户输入并根据这些输入向他们提供推荐列表。我正在使用链表数据结构,并且我可以获得程序的一部分来运行。但是,我目前遇到了一个似乎无法解决的错误。这是我遇到的问题:Traceback(mostrecentcalllast):File"/Use......
  • 如何实现 Grad-CAM 在 TensorFlow ResNet152V2 上查看激活图/热图以进行图像分类
    您好,我正在使用ResNet152V2做一个关于TensorFlow图像分类的小项目。我编写了一个Train-Predict.py脚本,它能够训练trained_weights.hdf5文件以成功预测自闭症和非自闭症人士的图像。此处。是脚本:#ImportLibrariesimportosimportnumpyasnp......
  • 如何忽略或绕过导致 NoneType 不可迭代对象的实例
    我正在尝试解析Edgar数据库中10K的部分,当我运行以下代码时,#pipinstalledgartoolsimportpandasaspdfromedgarimport*#TelltheSECwhoyouareset_identity("[email protected]")filings2=get_filings(form='10-K',amendments=False,......
  • 如何在.NET Framework,或NET8以前的项目中使用C# 12的新特性
    前两天发了一篇关于模式匹配的文章,链接地址,有小伙伴提到使用.NET6没法体验C#新特性的疑问,其实呢只要本地的SDK源代码编译器能支持到的情况下(直接下载VS2022或者VS的最新preview版本)只需要做很小的改动就可以支持的.目前仍然还有一些小伙伴因为历史原因可能还在写.NETFra......
  • PermissionError: [Errno 13] 权限被拒绝: 生产服务器上的“/root/.u2net”
    我正在使用rembg,它可以在我的本地计算机上运行,​​但在生产中会引发错误。所以我认为这与linux操作系统目录权限有关。这是服务器的完整日志:Traceback(mostrecentcalllast):File"/home/airnet-technologies-test-bgrm/htdocs/test-bgrm.airnet-technologies.com......
  • 使用列表理解过滤字典列表并处理 None 时,为什么会出现“NoneType 对象不可迭代”?
    在Python中,我使用列表理解来过滤带有键的字典列表。我正在处理None但仍然收到错误“NoneType对象不可迭代”。我知道这一定是一件简单的事情,但我看不到。为什么仍然出错?这是我重现问题的代码:defprocess_data(data,key):return[{k:[vforvinvali......
  • 解决.Net Framework3.5安装报错0x80070490
    .NETFramework是Windows平台下的软件框架,包括1.0~4.8多个版本,向下兼容。Win7默认安装的是3.5版,早期Win10版本默认安装的4.6版,本文分享如何在Win10和Win11上离线安装.NETFramework3.5,并解决安装报0x80070490找不到元素的错误。问题描述在早些年,有的软件安装时强制验证.NETFr......
  • HttpHeaders类详解,这一篇就够了
    目录一.总述二.案例展示三.set方法和add方法的区别1.set方法:2.add方法:区别总结:总结一.总述在Java中,HttpHeaders是一个用于表示HTTP请求或响应头的类,它属于java.net.http包,从Java11开始引入。这个类提供了一种方便的方式来操作HTTP消息头,包括添加、删除和获......