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


    前言

    今天大姚给大家分享一个.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("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[] { 123 }); // https://some-api.com?x=1&x=2&x=3
    
    "https://some-api.com"
        .AppendQueryParam("x"1);
        .AppendQueryParam("x"2);
        .AppendQueryParams("x", new[] { 34 }); // 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();
    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技术社区微信交流群👪

  • 相关阅读:
    Docker 中运行的 MySQL 数据库与 Docker 外部的管理系统连接
    如何学习和阅读代码
    【Docker】Docker简介_运行原理
    spring boot 拦截器不拦截静态资源,只拦截controller的方法
    spring复习(第一天下午)(黑马版)
    大数据分析与开发就业保障班
    mysql学习笔记-底层原理详解
    9. CSP-Cache Server Page
    规划类3d全景线上云展馆帮助企业轻松拓展海外市场
    我的创作纪念日,记录 Day,散
  • 原文地址:https://www.cnblogs.com/Can-daydayup/p/18310536