Flurl 组件使用

简介

先发上官网地址:https://flurl.dev/

Flurl 是一个异步的、可测试的、可移植的、URL 构建器和 .NET 的 HTTP 客户端库;Flurl 在NuGet上可用,可免费用于商业用途。它可以在各种平台上运行,包括 .NET Framework、.NET Core、Xamarin 和 UWP。

它能解决什么痛点

日常服务端调用接口,大都是通过HttpHelper实现,如果没有类库要不自己手敲要不网上找,显得我们技术很low,Flurl就完美解决这个问题。举个简单例子
T poco = "http://api.foo.com".GetJsonAsync<T>();
就是这么简单,直接返回泛型对象;

安装

通过nuget就可以安装,或者去官网下载后引用即可;

最佳实践

官网例子已经很全面了,懒得翻就看我的

Post请求

 var response = "www.baidu.com"
        .WithHeader("content-type", "application/x-www-form-urlencoded")  //可以继续增加Header参数
        .PostUrlEncodedAsync(new { name = "i am name"})    //post 开头就是post请求,反之亦然
        //x-www-form-urlencoded 需要使用 PostUrlEncodedAsync
        //form-data  需要使用  PostMultipartAsync
        .ReceiveJson<tt2>();  //post请求接受
 response.Wait();   //异步等待结果返回

Get请求

var response2 = "www.baidu.com"

点击查看代码
var response2 = "www.baidu.com"
                    .SetQueryParams(new { name="i am name"})  //QueryString参数
                    .WithHeader("Authorization", "Bearer dsafadsfadsfasdfasdf==") //Bearer 认证
                    .GetJsonAsync<tt3>();  //get请求返回
  response2.Wait();
                .SetQueryParams(new { name="i am name"})  //QueryString参数
                .WithHeader("Authorization", "Bearer dsafadsfadsfasdfasdf==") //Bearer 认证
                .GetJsonAsync<tt3>();  //get请求返回

response2.Wait();

特殊自定义请求

public class MyCustomHttpClientFactory : DefaultHttpClientFactory
{

    public override HttpMessageHandler CreateMessageHandler()
    {
        var client = base.CreateMessageHandler() as HttpClientHandler;
        client.Credentials = CredentialCache.DefaultNetworkCredentials;
        client.Proxy = new System.Net.WebProxy();  //new 一个新的代理
        client.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials; //使用默认的代理
        return client;
    }
}

 var response333 = new FlurlClient()
            .Configure(x =>
            {
                //配置特殊 HttpClient ,放置抛 407 代理错误                
                x.HttpClientFactory = new MyCustomHttpClientFactory();
            }).Request("http://www.baidu.com", "?name=i am name") 
            //Request比较特殊,第一个参数必须Uri.IsValid()通过
            //包含协议,域名
            .WithBasicAuth("account", "password")  // basic auth认证
            .GetJsonAsync<tt4>();
        response333.Wait();
posted @ 2022-04-29 18:06  anekos  阅读(1574)  评论(0编辑  收藏  举报