前言

今天大姚给大家分享一个.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支持。

优秀项目和框架精选

该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没)。

DotNetGuide技术社区交流群

  • DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目框架推荐、求职和招聘资讯、以及解决问题的平台。
  • 在DotNetGuide技术社区中,开发者们可以分享自己的技术文章、项目经验、学习心得、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
  • 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。

欢迎加入DotNetGuide技术社区微信交流群

适用于 .NET 的现代化、流畅、可测试的HTTP客户端库的更多相关文章

  1. 腾讯GT的流畅度测试方案研究

    GT源码:https://github.com/TencentOpen/GT 一.流畅度模块的代码结构 流畅度插件总共就几个类,其实处理方式也比较简单粗暴,就是通过Choreographer输出的lo ...

  2. Android流畅度测试

    Android流畅度测试 测试方法一:系统自带-开发者模式 测试方法二:FPS Meter测试安卓帧数 H5页面加载速度:window.performance.timing 测试方法一:系统自带-开发 ...

  3. app流畅度测试--使用手机自带功能

    1.进入开发者选项,在“监控”选项卡找到“GPU呈现模式分析”的选项 2.开启后,即可以条形图和线形图的方式显示系统的界面相应速度 3.那么要如何根据曲线判断系统是否流畅呢?实际上这个曲线表达的是GP ...

  4. Redis集群的使用测试(Jedis客户端的使用)

    Redis集群的使用测试(Jedis客户端的使用)1.Jedis客户端建议升级到最新版(当前为2.7.3),这样对3.0.x集群有比较好的支持.https://github.com/xetorthio ...

  5. 如何测试你给客户端app开的接口

    这里介绍一款工具用于测试后台给客户端开的接口. 采用http或者https 采用表单或者json格式 这款工具之前是谷歌浏览器的一款插件,后来出现了各个平台的客户端.非常实用. 名叫postman 官 ...

  6. app流畅度测试--使用SM

    通过测量应用的帧率FPS并不能准确评价App的流畅度,FPS较低并不能代表当前App在UI上界面不流畅,而1s内VSync这个Loop运行了多少次更加能说明当前App的流畅程度. 那么我们可以直接在A ...

  7. app流畅度测试--使用FPS Meter

    1.FFPS Meter是一款非常实用的小软件,能够用数字实时显示安卓界面的每秒帧数,非常直观.此外,FPS Meter还可以显示最大帧数.最小帧数以及平均帧数,用来评价安卓流畅度极具价值.由于涉及到 ...

  8. 测试开发-PC客户端测试要点

      一级测试点 二级测试点 安装测试 首次安装(exe和msi格式的不同) 安装程序权限检查 软件安装包的描述和属性信息 静默安装和非静默安装测试 有UAC安装.无UAC安装 联网安装.断网安装 对必 ...

  9. Socket测试工具(客户端、服务端)

    Socket是什么? SOCKET用于在两个基于TCP/IP协议的应用程序之间相互通信.最早出现在UNIX系统中,是UNIX系统主要的信息传递方式.在WINDOWS系统中,SOCKET称为WINSOC ...

  10. App测试时,区分客户端或服务器端导致问题产生的方法

    1.先确定产生问题的地方是否与服务器产生交互/通信,若无则非服务器问题: 2.通过Fiddler抓包,查看操作时调用的服务器接口是否正常并检查对应返回值: 3.若接口返回值正常,则需查看客户端对业务的 ...

随机推荐

  1. Semantic Kernel入门系列:利用YAML定义prompts functions

    引言 在上一章节我们熟悉了prompts functions(提示函数)的创建,我们了解了PromptTemplateConfig中各个属性的简单使用.Semantic Kernel允许我们利用多种方 ...

  2. 【C#】字符串按条件替换关键字

    private string MyReplace(string json, string keyWord, string newWord, Func<string, string, bool&g ...

  3. 10W QPS高并发,如何防止重复下单?

    小北说在前面 10wqps高并发,如何防止重复提交/支付订单? 10wqps高并发,如何防止重复下单? 10wqps高并发,如何防止重复支付? 10wqps高并发,如何解决重复操作问题? 最近有小伙伴 ...

  4. Understanding Swift’s value type thread safety - 代码分析(一)

    结构体并不代表线程安全,swift在此上未做保证 func testScenarioA() throws { var store: Int = 0 DispatchQueue.concurrentPe ...

  5. zoxide更新后 (cd)异常

    关于zoxide github地址:https://github.com/ajeetdsouza/zoxide 简单来说 zoxide是一个cd的强化版.它会记录你曾经cd过的目录,在你使用cd的时候 ...

  6. k8s集群创建阿里云版本

    阿里云创建k8s集群实例 创建两个8G内存的抢占实例(青岛),能ssh 默认关闭防火墙,且没有交换分区 配置/etc/hosts,主机名 配置k8s仓库 配置命令补全 安装docker(需要conta ...

  7. 京东web端h5st—4.7逆向分析

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6 ...

  8. this的二种使用方式

    package com.ht.TestThis; public class TestThisKey { public static void main(String[] args) { // TODO ...

  9. LNMP集群架构

    网站集群拆分 上一节我们是部署了单机的LNMP,再往下,要进行拆分了,无论是性能.还是安全性,都务必要拆分. 拆分的内容有 nginx集群 mysql nfs共享存储 等 拆分思路 情况1 当前的单机 ...

  10. Scrapy框架(九)--分布式爬虫

    分布式爬虫 - 概念:我们需要搭建一个分布式的机群,让其对一组资源进行分布联合爬取. - 作用:提升爬取数据的效率 - 如何实现分布式? - 安装一个scrapy-redis的组件 爬取到的数据自动存 ...