.NET Core - HttpClient 与 RestSharp [关闭]

Posted

技术标签:

【中文标题】.NET Core - HttpClient 与 RestSharp [关闭]【英文标题】:.NET Core - HttpClient vs RestSharp [closed] 【发布时间】:2020-01-08 18:23:07 【问题描述】:

我整天都在网上搜索一个简单的比较,但还没有找到有关该主题的任何最新信息。

我最近加入了一个团队,该团队正在处理一个使用 RestSharp 进行所有 API 调用的项目。我之前通过.NET Core IHttpclientFactoryCreateClient 方法实现了一个HttpClient

我正在寻找有关每个调用 REST 端点的客观利弊。这仅仅是偏好问题吗?在 RestSharp 库和 IHttpClientFactory 实现之间,HttpClient 生命周期的管理方式是否存在根本差异?

我注意到,或者至少在我看来,我无法在细粒度级别上管理传入的响应,但为了提出问题,让我们将其归结为我缺乏使用 RestSharp 的经验。

【问题讨论】:

那些是不同的东西,这就是为什么没有比较。 RestSharp 是一个 HTTP 库,与 HttpClient 非常相似。另一方面,HttpClientFactory 负责 HttpClient 缓存和生命周期 是的。所以 IHttpClientFactory 抽象了 HttpClient 的缓存和生命周期,所以通过 CreateClient 方法实现接口,你本质上也是在使用 HttpClient,但没有管理所述 HttpClient 生命周期的麻烦。如果 RestSharp 具有类似的功能,或者实际上只是实现 IHttpClientFactory,那么如果 RestSharp 或任何第三方库在所使用的平台上已经成熟,为什么还要费心呢?这就是为什么我对利弊感兴趣 我们曾经使用过 RestSharp,现在我们使用的是 HttpClient(Typed、named 和 HttpClientFactory),它们都是很棒的客户端,但是使用 net core 时我们保存了一个依赖项。为什么要使用第三方?之前微软的库有一些弱点,不太好用,所以有些库弥补了这些缺点,有了net core,一切都变了,客户端更容易使用,看起来很稳定,性能很好…… ...,但这并不会使库变得不必要,我会说如果你有一个带有其他库的旧数据库是可以的,如果你正在使用 net core 创建一个新项目,请尝试官方的,或者如果您需要一些库更易于使用的功能,请继续 RestSharp 使用 HttpWebRequest,现在是 uses HttpClient 内部的遗留类 【参考方案1】:

有些人更喜欢使用 HttpClient,因为它已经内置在框架中。因此,无需为您的项目添加额外的膨胀。

RestSharp 与任何库一样,更易于使用,因为有人已经完成了艰苦的工作并解决了一路上遇到的问题。

我都用过,一个并不比另一个好。这取决于您的用例、情况和环境。

我有一个需要调用另一个 REST API 的 WebAPI 代理项目。我最初选择 RestSharp 是因为我在另一个项目中使用它时已经熟悉了它。但是,我最终改为使用 HttpClient,因为它使用与 WebAPI 控制器相同的返回类型,因此它节省了我将 RestSharp 的响应转换回 HttpResponseMessage 的时间。

当然,每个都有其优点和缺点,它只是归结为您的用例。

【讨论】:

除非 RestSharp 使用原始套接字,否则它最终会使用 HttpClient - 在 .NET Core 中,HttpWebRequest 是 rewritten to use HttpClient【参考方案2】:

我将 RestSharp 用于 WindowsForm 应用程序,因为它很容易实现。

现在我正在使用 Blazor,最新的更新让我不再使用简单的 WebApi 调用,如下所示:

data = await Http.PostJsonAsync<LocationEntity>("api/GetLocation", data);

现在要获得相同的功能,我必须这样做。

GridRecords = await Http.PostAsJsonAsync<List<LocationEntity>>("api/GetLocations", datalist)
    .Result.Content.ReadFromJsonAsync<List<LocationEntity>>();

我还必须传递我的参数,它是一个简单的实体作为列表,所以我有更多的东西要写。这是简单的代码,但没有任何价值。

是的,我正在认真研究 RestSharp 或替代方案,以简化应该是简单的 WebApi 调用。

我不知道这么简单的事情怎么会变得这么复杂。

我的 2 美分。我有点落后了,现在我需要花一天时间更新我所有的 WebApi 调用,因为 MS 决定对签名进行如此多的更改。

如果我使用第三方,我可以更新我的 Blazor 版本,而不必担心我的 API 逻辑需要更改。这是为所有库使用一个供应商的缺点。

【讨论】:

以上是关于.NET Core - HttpClient 与 RestSharp [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

.NET Core HttpClient+Consul实现服务发现

如何在ASP.NET Core 中使用IHttpClientFactory

.NET CORE HttpClient使用

.Net及.Net Core下HttpClient详解

《ASP.NET Core 6框架揭秘》实例演示[18]:HttpClient处理管道

在.NET Core使用 HttpClient 的正确方式