ASP.NET Core HttpClient正确使用方法之系列一

这系列我们主要介绍一下HttpClient,该类主要是用来从统一资源标识符(URI)标识的资源来发送HTTP请求或者接受HTTP响应,我们可以使用该类做一些WebAPI资源请求和处理,我们通过例子来介绍如何使用HttpClient

1.默认方式

首先我们创建一个AspNetCore.HttpClient项目,添加如下代码在Program.cs,该代码实际上调用AddHttpClient方法注册IHttpClientFactory

8bc1a7c38e32cc9468c4a52ed4a85251.png

接下来我们在HomeController构造函数中通过依赖注入获取到IHttpClientFactory类:

95fe123bc306bf0c5d1309f344b6628e.png

接着我们在HomeController中新增BasicUsage方法,我们使用该方法来请求github api,在这个例子中,我们获取微软asp.net core doc仓库的分支:

2df0fcfa5cb0fef04ba6a281a4c9c17b.png

在BasicUsage方法内部定义了一个HttpRequestMessage对象,该对象主要表示HTTP请求的消息,主要包含HTTP请求头,HTTP请求方法以及数据,我们使用IHttpClientFactory接口中的CreateClient()方法创建一个HttpClient对象,接下来调用HttpClient的SendAsync方法发送异步HTTP请求,该方法返回一个HttpResponseMessage对象,该对象包含了我们请求的结果,我们读取该对象,并将结果序列化到GitHubBranch类的集合中,到此整个请求完成,我们将结果返回给视图:

91a241e5a2f364645e2e2ca25781d671.png

运行应用程序,我们看到如下运行结果:

a8267f5d852eaa53ce456868f58b93b1.png

2.命名方式声明HttpClient

我们在创建HttpClient时候可以给对象起个名字,应用程序中多个接口时,针对不同接口做不同配置,我们通过一个例子来演示,我们在Programe类中添加如下代码:

85bc2a70fa98001fbee95582e8e2fbb7.png

上面代码中对HttpClient做了一些基本配置,添加BaseAddress和两个Header,在第一个例子中我们已经从构造函数中获取到了IHttpClientFactory接口,在HomeController中添加一个NamedClient方法:

7845918e821d03738559350555fe3d94.png

上面代码中我们使用了github接口获取所有AspNetCore文档pulls接口,在上面代码中我们调用IHttpClientFactory的CreateClient方法时传递了一个字符串参数gitHub,之后再调用HttpClient的GetAsync异步方法时只是传递了子路径,并没有传递基地址,GetAsync方法会返回一个HttpResponseMessage对象,我们通过该对象读取请求的结果,并将结果序列化成对象传递给视图

5ed593b6bff26bd5661353ecdca29873.png

我们通过相同的视图组件来渲染该结果:

b6960a98fab8c60289998f310e65f126.png

3 类型化方式声明HttpClient

这种方式和命名方式声明HttpClient有点相似,只不过在创建HttpClient的时候不需要使用字符串命名,在项目根目录下创建Service文件夹,在文件夹下创建一个GitHubService的服务,代码如下:

c2fb1a7f898413314b431c50d06ca420.png

我们在GitHubService类中对HttpClient做了一些配置,这种方式和命名方式声明HttpClient非常相识,我们把请求的接口封装到了GetAspNetDocsIssues方法中

接下来我们在Program类中添加如下代码:

40758107efb02841d756dde9ac467c38.png

接着我们在HomeController中通过依赖注入引用GitHubService服务并添加TypedClient方法:

fd466f173cdfd00c98520024b200ef9a.png

最后在视图中获取请求结果并展示到页面:

50aac0cf5624ef3c55309cb59d46c901.png

运行结果如下:

125411f6175bc46a5916e74570a04f9f.png

4 HttpClient集成第三方REST API

我们可以使用HttpClient集成第三方REST API库,例如:Refit,Refit是一个.NET第三方的REST API库,Github地址如下:https://github.com/reactiveui/refit

我们在项目中引用Refit.HttpClientFactory包:

173abd5265f30b24aa0875dbc0562793.png

我们在项目Service文件夹下创建一个IGitHubClient接口:

ada75104e4518a8cd34472b9a90cb270.png

接下来我们在启动项中配置RefitClient对象:

376e4956ae9008bfb9937d7c21edd353.png

在HomeController类的构造函数中获取IGitHubClient接口,新增一个RefitClient方法:

eaeee6f945b43f3f6e68c10b92b8b60f.png

我们将返回结果呈现到视图:

1db9f875e3b4dd4ccbc7ee61a1321727.png

运行结果如下:

4ac3fc675b664f65146ab5bc743e153d.png

源代码地址:

https://github.com/bingbing-gui/Asp.Net-Core-Skill/tree/master/Fundamentals/AspNetCore.HttpRequest/AspNetCore.HttpClient

参考文献

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-8.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值