zoukankan      html  css  js  c++  java
  • Flurl Http 用法

    先上代码,先说自己为什么会用到这个技术

    自己一开始写的代码,是要设置一个参数放置在请求Header中,列如:

    HttpClient httpClient = _myhttpclient.CreateClient();
    var obj = new JObject { { "xxxx", whse }, { "xxxx", sonumber } };
    HttpContent content = new StringContent(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json");
    //这里是要Add一个RequestHeaders属性
    httpClient.DefaultRequestHeaders.Add("Authorization", token);
    var Result = httpClient.PostAsync(url, content).GetAwaiter().GetResult();                    
    var s = Result.Content.ReadAsStringAsync();
    var j = JObject.Parse(s.Result);

    如果使用Flurl该怎么写呢

    var j = await  Url
                       .WithHeader("Authorization", day_token)
                       .PostJsonAsync(new JObject { { "owner", whse }, { "soNos", sonumber } })
                       .ReceiveJson<JObject>();
    var Json = JsonConvert.SerializeObject(j);

    这个Url会“点”出来许多Flurl的属性方法,这样我们就可以给一些需要的请求去加参数
    相比较对比上面的代码就很简单多了

    介绍及优点

    官方介绍,Flurl是一个现代的,流利的,支持异步的,可测试的,可移植的,URL增强和Http客户端组件。
    Flurl 组件让Http操作变得更简单易用,你可以在项目中尝试使用它,其他的还有一些功能,可测试可配置等,你都可以在官网找到它的文档
    Flurl允许您直接从连贯URL构建器链执行许多常见的HTTP任务。其下是HttpClient和相关类。
    正如您将看到的,Flurl使用方便的方法和流畅的优点增强了HttpClient,但并没有试图完全抽象它
    在 Flurl 库中,它是内部管理 HttpClient实例, 通常一个主机Host,会创建一个HttpClient,然后缓存来复用。
    Flurl 也很好的支持了IOC容器,你也可以在依赖注入中使用它。

    例子:

    1:命名空间
    using Flurl;
    using Flurl.Http;
    2、使用Nuget安装引用Flurl.Http(Fluent HTTP) 相关文档:VS(Visual Studio)中Nuget的使用 2)使用Package Manager命令安装 PM> Install-Package Flurl.Http -Version 2.4.2 3)使用.NET CLI命令安装 > dotnet add package Flurl.Http --version 2.4.2 3、执行GET和HEAD请求响应HttpResponseMessage 相关文档:HttpResponseMessage var getResp = await "http://api.foo.com".GetAsync(); var headResp = await "http://api.foo.com".HeadAsync(); 3、获取请求JSON数据 从JSON API获取强类型的poco对象: T poco = await "http://api.foo.com".GetJsonAsync(); 当创建类来匹配JSON时,非通用版本返回一个dynamic: dynamic d = await "http://api.foo.com".GetJsonAsync(); 从一个返回JSON数组的API获取一个动态列表: var list = await "http://api.foo.com".GetJsonListAsync(); 4、获取请求strings, bytes, 和streams 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(); 5、下载文件 // 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); 6、Post提交数据(JSON、Html Form) POST提交JSON数据 await "http://api.foo.com".PostJsonAsync(new { a = 1, b = 2 }); 模拟HTML表单post提交 await "http://site.com/login".PostUrlEncodedAsync(new { user = "user", pass = "pass" }); 上述Post方法返回一个任务<HttpResponseMessage>。当然,您可能希望在响应体中返回一些数据: T poco = await url.PostJsonAsync(data).ReceiveJson<T>(); dynamic d = await url.PostUrlEncodedAsync(data).ReceiveJson(); string s = await url.PostUrlEncodedAsync(data).ReceiveString(); 7配置http请求头(header) // one: await url.WithHeader("Accept", "text/plain").GetJsonAsync(); // multiple: await url.WithHeaders(new { Accept = "text/plain", User_Agent = "Flurl" }).GetJsonAsync(); 在上面的第二个示例中,User_Agent将自动呈现为User-Agent标题名称。(连字符在标头名称中非常常见,但在C#标识符中不允许;下划线,恰恰相反)。 使用Basic authentication验证: await url.WithBasicAuth("username", "password").GetJsonAsync(); OAuth 2.0 bearer token: await url.WithOAuthBearerToken("mytoken").GetJsonAsync(); 8、配置Fluent HTTP (Flurl) 设置超时(timeout)时间 await url.WithTimeout(10).DownloadFileAsync(); // 10 seconds await url.WithTimeout(TimeSpan.FromMinutes(2)).DownloadFileAsync(); 设置cookies // one: await url.WithCookie("name", "value", expDate).HeadAsync(); // multiple: await url.WithCookies(new { c1 = 1, c2 = 2 }, expDate).HeadAsync(); // date is optional; excluding it makes it a session cookie. 取消请求 var cts = new CancellationTokenSource(); var task = url.GetAsync(cts.Token); ... cts.Cancel(); 一些不太常见的场景: // 使用 "raw" System.Net.Http.HttpContent object await url.PostAsync(httpContent); // 使用HttpMethod指定请求方式 await url.SendJsonAsync(HttpMethod.Options, poco); // 执行更复杂配置的请求 await url.SendAsync( HttpMethod.Trace, httpContent, // optional cancellationToken, // optional HttpCompletionOption.ResponseHeaderRead); // optional

    Jb51上的例子

    人各有命,上天注定,有人天生为王,有人落草为寇。脚下的路,如果不是你自己的选择,那么旅程的终点在哪,也没人知道。你会走到哪,会遇到谁,都不一定。
  • 相关阅读:
    2015年第5本(英文第4本):Death on the Nile尼罗河上的惨案
    2015年第4本(英文第3本):Godfather教父
    2015年第3本(英文第2本):Daughter of Deceit
    2015年第2本(英文第1本):《The Practice of Programming》
    2015年第1本读书行动笔记:《把你的英语用起来》
    GTD桌面2.0
    独立博客开张!有关读书、GTD和IT方面的内容将发布在新网站上
    2015计划
    Swift
    Swift
  • 原文地址:https://www.cnblogs.com/ZkbFighting/p/14904523.html
Copyright © 2011-2022 走看看