如何在 .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操作变得更简单易用,你可以在项目中尝试使用它,其他的还有一些功能,可测试可配置等,你都可以在官网找到它的文档

以上就是如何在 .NET 中使用 Flurl 高效处理Http请求的详细内容,更多关于.NET 中使用 Flurl 处理Http请求的资料请关注我们其它相关文章!

(0)

相关推荐

  • ASP.NET Core扩展库之Http日志的使用详解

    最佳实践都告诉我们不要记录请求的详细日志,因为这有安全问题,但在实际开发中,请求的详细内容对于快速定位问题却是非常重要的,有时也是系统的强力证据.Xfrogcn.AspNetCore.Extensions扩展库提供了服务端和客户端的详细日志功能,通过配置可以开启. 服务端日志通过请求中间件来完成,中间件会以Trace级别记录请求和应答详情,以Debug级别记录请求耗时.服务的请求日志的名称为ServerRequest.Logger 要开启服务端详情日志,只需将扩展库配置中的ServerReque

  • .NET Core使用HttpClient进行表单提交时遇到的问题

    问题# 在开发微信支付的小微商户进件接口时,需要通过表单来上传身份证图片等数据.在微信支付接口文档也说明了,需要使用 multipart/form-data 的方式发送请求..NET 提供了 MultipartFormDataContent 类型,帮助我们构建表单请求,故有以下代码: var form = new MultipartFormDataContent() { {new StringContent("Value"),"Name}, {new ByteArrayCon

  • 如何在ASP.NET Core中使用HttpClientFactory

    ASP.Net Core 是一个开源的,跨平台的,轻量级模块化框架,可用它来构建高性能的Web程序,这篇文章我们将会讨论如何在 ASP.Net Core 中使用 HttpClientFactory. 为什么要使用 HttpClientFactory 可以用 HttpClientFactory 来集中化管理 HttpClient,工厂提供了对 HttpClient 的创建,配置和调度,值得一提的是:HttpClient 一直都是 Http 请求业务方面的一等公民. HttpClient 虽好,但它

  • .net Core 使用IHttpClientFactory请求实现

    导读:本文已添加在 晨曦微服务之旅 ,现在自己在尝试微服务架构,一边学边做项目快速的进入状态.当然在学习的过程中会将自己学到的知识进行分享. 一.为什么不用HttpClient 1.HttPClient使用完之后不会立即关闭开启网络连接时会占用底层socket资源,但在HttpClient调用其本身的Dispose方法时,并不能立刻释放该资源 2.如果频繁的使用HttpClient,频繁的打开链接,关闭链接消耗就会很大. 二.解决方案 1.我们可以延长HttpClient的生命周期,比如对其建一

  • 在ASP.NET Core中用HttpClient发送POST, PUT和DELETE请求

    在上一篇文章中,我们已经学习了如何在ASP.NET Core中使用HttpClient从Web API获取数据.此外,我们还学习了如何使用GetAsync方法和HttpRequestMessage类发送GET请求.在本文中,我们将学习如何在ASP.NET Core中使用HttpClient发送POST.PUT和DELETE请求,并使用PostAsync.PutAsync.DeleteAsync和HttpRequestMessage类创建请求. 在ASP.NET Core中使用HttpClient

  • 在ASP.NET Core5.0中访问HttpContext的方法步骤

    ASP.NET Core 应用通过 IHttpContextAccessor 接口及其默认实现 HttpContextAccessor 访问 HttpContext. 只有在需要访问服务内的 HttpContext 时,才有必要使用 IHttpContextAccessor. 通过 Razor Pages 使用 HttpContext Razor Pages PageModel 公开 HttpContext 属性: public class AboutModel : PageModel { pu

  • ASP.NET Core扩展库之Http通用扩展库的使用详解

    本文将介绍Xfrogcn.AspNetCore.Extensions扩展库对于Http相关的其他功能扩展,这些功能旨在处理一些常见需求, 包括请求缓冲.请求头传递.请求头日志范围.针对HttpClient与HttpRequestMessage.HttpResponseMessage的扩展方法. 一.开启服务端请求缓冲 ASP.NET Core 中请求体是不能多次读取的,由于在MVC中,框架已经读取过请求体,如果你在控制器中再次读取,将会引发异常,如下示例: [ApiController] [Ro

  • ASP.NET Core中的Http缓存使用

    Http响应缓存可减少客户端或代理对web服务器发出的请求数.响应缓存还减少了web服务器生成响应所需的工作量.响应缓存由Http请求中的header控制. 而ASP.NET Core对其都有相应的实现,并不需要了解里面的工作细节,即可对其进行良好的控制. 了解Http缓存 Http协议中定义了许多缓存,但总体可以分为强缓存和协商缓存两类. 强缓存 强缓存是指缓存命中时,客户端不会向服务器发请求,浏览器F12能看到响应状态码为200,size为from cache,它的实现有以下几种方式: Ex

  • .Net Core下HTTP请求IHttpClientFactory示例详解

    使用方式 IHttpClientFactory有四种模式: 基本用法 命名客户端 类型化客户端 生成的客户端 基本用法 在 Startup.ConfigureServices 方法中,通过在 IServiceCollection 上调用 AddHttpClient 扩展方法可以注册 IHttpClientFactory services.AddHttpClient(); 注册之后可以像依赖注入DI似得在类中通过构造函数注入形式使用,伪代码: class A { private readonly

  • 在ASP.NET Core中应用HttpClient获取数据和内容

    在本文中,我们将学习如何在ASP.NET Core中集成和使用HttpClient.在学习不同HttpClient功能的同时使用Web API的资源.如何从Web API获取数据,以及如何直接使用HttpRequestMessage类来实现这些功能.在以后的文章中,我们将学习如何发送POST.PUT和DELETE请求,以及如何使用HttpClient发送PATCH请求. 要下载源代码,可以访问https://github.com/CodeMazeBlog/httpclient-aspnetcor

  • .NET CORE HttpClient的使用方法

    前言 自从HttpClient诞生依赖,它的使用方式一直备受争议,framework版本时代产生过相当多经典的错误使用案例,包括Tcp链接耗尽.DNS更改无感知等问题.有兴趣的同学自行查找研究.在.NETCORE版本中,提供了IHttpClientFactory用来创建HttpClient以解决之前的种种问题.那么我们一起看一下它的用法. 使用方式 基本用法. 直接注入IHttpClientFactory 命名客户端.注入IHttpClientFactory并带有名称,适用于需要特定的客户端配置

随机推荐