zoukankan      html  css  js  c++  java
  • 在 .NET 中使用 Flurl 高效处理Http请求

    简介

    官方介绍,Flurl是一个现代的,流利的,支持异步的,可测试的,可移植的,URL增强和Http客户端组件。

    Url构建

    现在有一个登录的接口,地址如下:

    https://www.some-api.com/login?name=Lee&pwd=123456
    

    我们在处理这个地址的时候,会拼接 login,然后拼接?号,然后拼接参数,中间还要拼接& 得到最终的地址。

    使用 Flurl 构建,首先需要通过 Nuget 安装 Flurl 组件。

     var url = "http://www.some-api.com"
               .AppendPathSegment("login")
               .SetQueryParams(new
               {
                   name = "Lee",
                   pwd = "123456" 
               });  
    

    这很简单,这是最简单的Get请求,同样的我们也可以使用 Uri 的扩展方法

    var url = new Uri("http://www.some-api.com").AppendPathSegment(...

    Http 增强

    Flurl 是模块化的,所以还需要安装 Flurl.Http

    using Flurl;
    using Flurl.Http;
    
    var result = await "http://www.some-api.com".AppendPathSegment("login").GetAsync();
    

    上面的代码会发送一个GET请求,并返回一个IFlurlResponse,可以得到 StatusCode,Headers等,也可以通过 GetStringAsync 和 GetJsonAsync 得到响应内容。

    如果只是想获取响应内容,我们看看 Flurl 有多简单:

    T poco = await "http://api.foo.com".GetJsonAsync<T>();
    string text = await "http://site.com/readme.txt".GetStringAsync();
    byte[] bytes = await "http://site.com/image.jpg".GetBytesAsync();
    Stream stream = await "http://site.com/music.mp3".GetStreamAsync();
    

    Post提交

    await "http://api.foo.com".PostJsonAsync(new { a = 1, b = 2 });
    

    动态类型 dynamic

    dynamic d = await "http://api.foo.com".GetJsonAsync();
    

    设置请求标头:

    
    await url.WithHeader("Accept", "text/plain").GetJsonAsync();
    
    await url.WithHeaders(new { Accept = "text/plain", User_Agent = "Flurl" }).GetJsonAsync();
    

    基础身份验证

    await url.WithBasicAuth("username", "password").GetJsonAsync();
    

    OAuth 2.0

    await url.WithOAuthBearerToken("mytoken").GetJsonAsync();
    

    表单提交

    await "http://site.com/login".PostUrlEncodedAsync(new { 
        user = "user", 
        pass = "pass"
    });
    

    HttpClient 管理

    我们通常不会创建太多的 HttpClient, 过多的连接会耗尽服务器资源,通常会抛出 SocketException 异常,大部分还是使用 HttpClientFactory。

    在 Flurl 库中,它是内部管理 HttpClient实例, 通常一个主机Host,会创建一个HttpClient,然后缓存来复用。

    Flurl 也很好的支持了IOC容器,你也可以在依赖注入中使用它。

    总结

    Flurl 组件让Http操作变得更简单易用,你可以在项目中尝试使用它,其他的还有一些功能,可测试可配置等,你都可以在官网找到它的文档。

    欢迎扫码关注我们的公众号 【全球技术精选】,专注国外优秀博客的翻译和开源项目分享。

  • 相关阅读:
    eclipse 注释模板
    解决win7访问不了局域网共享文件
    java 执行command
    解决Unable to reach a settlement: [diffie-hellman-group1-sha1, diffie-hellman-group-exchange-sha1] and [curve25519-sha256@li
    解决java.lang.UnsupportedClassVersionError
    hadoop命令备忘
    intellij 提交代码到git
    java用代理访问
    解决 jersey javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119)
    解决Unable to locate Kerberos realm
  • 原文地址:https://www.cnblogs.com/myshowtime/p/14512563.html
Copyright © 2011-2022 走看看