.NET Core - HttpClient 与 RestSharp

Jos*_* G. 26 c# httpclient .net-core

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

我最近加入了一个团队,该团队致力于一个使用 RestSharp 进行所有 API 调用的项目。我之前已经HttpClient通过CreateClient.NET Core的方法实现了一个IHttpclientFactory。

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

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

tno*_*007 7

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

RestSharp和任何图书馆一样,更容易使用,因为有人已经做了艰苦的工作并解决了一路上遇到的问题。

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

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

当然,每种方法都有其优点和缺点,归结为您的用例。


小智 6

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

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

data = await Http.PostJsonAsync<LocationEntity>("api/GetLocation", data);
Run Code Online (Sandbox Code Playgroud)

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

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

我还必须传递我的参数,它是一个作为列表的简单实体,因此我有更多的时间来编写。这是简单的代码,但没有增加任何价值。

所以,是的,我正在认真考虑 RestSharp 或替代方案来简化简单的 WebApi 调用。

我不知道这么简单的事情为什么要搞得这么复杂。

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

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

  • 它可能已更改,因为 RestSharp 最近进行了更新,将其在幕后使用的旧版 HttpWebRequest 切换为使用 HttpClient。现在,RestSharp 能给桌面带来什么价值是非常值得怀疑的,并且对现有代码的破坏足以严重质疑直接使用 HttpClient。 (2认同)