首页 > 编程语言 >C# Flurl 高性能的访问http

C# Flurl 高性能的访问http

时间:2022-12-21 18:15:06浏览次数:40  
标签:http C# GetJsonAsync await api Flurl com

安装

nuget 搜索安装flurl.http

使用

 var url = "http://www.some-api.com"
           .AppendPathSegment("login")
           .SetQueryParams(new
           {
               name = "Lee",
               pwd = "123456" 
           });  
//构造出来的url:https://www.some-api.com/login?name=Lee&pwd=123456
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容器,你也可以在依赖注入中使用它。

标签:http,C#,GetJsonAsync,await,api,Flurl,com
From: https://www.cnblogs.com/guangzhiruijie/p/16996847.html

相关文章

  • 带你玩转OpenHarmony AI:基于Seetaface2的人脸识别
     简介随着时代的进步,全民刷脸已经成为一种新型的生活方式,这也是全球科技进步的又一阶梯,人脸识别技术已经成为一种大趋势,无论在智慧出行、智能家居、智慧办公等场景均......
  • rocketmq搭建和测试
    准备工作搭建rocketmq:1.命令启动mqbroker:mqbroker.cmd-nlocalhost:9876autoCreateTopicEnable=true(保证topic自动创建)2.启动mqnamesrv.cmd生产者-客户端初始化:packa......
  • 用户 'NT Service\SSISScaleOutMaster140' 登录失败。 原因: 找不到与提供的名称匹配
    https://www.cnblogs.com/zhengwei-cq/p/14866001.html项目情况:用户‘NTService\SSISScaleOutMaster140’登录失败。原因:找不到与提供的名称匹配的登录名。[客户......
  • 使用MiniO Client(mc)连接AWS S3
    客户端名称:minioclientminio中文官网地址:http://docs.minio.org.cn/docs/master/minio-client-complete-guideminio英文官网地址:https://min.io/docs/minio/linux/index.ht......
  • MMCM/PLL VCO
    输入输出时钟频率,input 322.265625Mhz,output312.5Mhz对于使用MMCM与PLL的不同情况,虽然输入输出频率是一样的,但是,分/倍频系数是不同的,不能使用同一套参数(M/D/O)。原......
  • 关于STM32CAN通信中过滤器两种模式的配置
    一、关于问题的阐述:最近在完善vesc的CAN通信相关代码,在配置过滤器时碰到了问题。1.1 对过滤器的两种模式理解不全面1.1.1关于过滤器的掩码模式。当时由于......
  • 将微服务项目利用Docker部署到服务器
    一、Docker基本知识写DockerFile文件创建自己的镜像volumn挂载目录容器间通信:同一network下docker-compose进行多容器部署二、部署过程(docker-hub网站里有现成容器部......
  • [USACO18OPEN] Talent Show G 题解
    [USACO18OPEN]TalentShowG想法同样是01分数规划。思路先假设一个不够好的答案\(mid\),则原答案可表示为\[\dfrac{\sumt_i}{\sumw_i}(\sumw_i\geqW)\]我们先......
  • Electron-Vite快速识别
    构建Vite-electron项目npmielectron-vite-Dnpmcreate@quick-start/electronproject-name--templatevue-tsElectron的运行流程Electron进程一、主进程:有且......
  • APPscan设置自动扫描时间
    一、设置位置1.在设置自动扫描时间之前,我们要先创建扫描配置,然后再启动设置面板。2.启动AppScan,单击展开软件顶部菜单栏【工具】按钮,单击下拉菜单内【扫描调度程序】,便可......