.NET Core - HttpClient与RestSharp的区别

40

我整天在网上搜寻有关这个主题的简单比较,但仍然找不到最新的信息。

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

我正在寻找关于每个调用REST终端点的客观利弊方面的信息。 这只是一种偏好吗? 在RestSharp库和IHttpClientFactory实现之间,HttpClient 生命周期的管理是否存在任何潜在差异?

我注意到,或者至少在我看来,我无法像以前那样在更精细的级别上管理传入响应,但出于提问的目的,让我们将其归咎于我对RestSharp缺乏经验。


5
这些是不同的东西,因此它们无法进行比较。RestSharp是一个HTTP库,与HttpClient非常相似。另一方面,HttpClientFactory负责HttpClient的缓存和生命周期。 - Panagiotis Kanavos
2
在我看来,这个问题属于“大猩猩 vs 鲨鱼”类别的问题。 - user47589
7
我们以前使用RestSharp,现在我们改用HttpClient(Typed、Named和HttpClientFactory),两种客户端都很好,但使用Net Core的客户端可以减少依赖。为什么要使用第三方库?以前Microsoft的库存在一些弱点,不太容易使用,因此出现了一些库来弥补缺陷。但是随着Net Core的出现,客户端更易于使用,似乎也更稳定和高效。 - rekiem87
2
...但这并不意味着库是不必要的。我认为,如果你有一个旧的数据库和其他库一起使用也可以,但如果你正在创建一个新项目并使用net core,建议使用官方库;或者如果你需要某个库提供的功能来更轻松地使用,那就去试试吧。 - rekiem87
3
RestSharp使用HttpWebRequest,这是一个现已落后的类,其内部使用HttpClient。 - Panagiotis Kanavos
显示剩余3条评论
2个回答

20

有些人喜欢使用 HttpClient,因为它已经内建在框架中,所以无需在项目中添加额外的臃肿代码。

像其他库一样,RestSharp 更容易使用,因为有人已经完成了艰苦的工作并解决了所遇到的问题。

我两种都用过,其中一个并不比另一个更好。这只取决于你的用例、情境和环境。

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

当然,每个工具都有其优缺点,只要根据你的实际使用情况作出选择。


1
除非RestSharp使用原始套接字,否则它最终会使用HttpClient - 在.NET Core中,HttpWebRequest被重写为使用HttpClient。 (https://github.com/dotnet/runtime/blob/9b79ee6db16b27d10a49c6f73b54cf13c38bdcaa/src/libraries/System.Net.Requests/src/System/Net/HttpWebRequest.cs#L1130) - Panagiotis Kanavos

5

我正在使用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调用。

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

这是我的看法。我落后了一些,现在我需要花费一天时间更新所有我的WebApi调用,因为微软改变了签名方式。

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


2
它可能已经改变了,因为RestSharp最近进行了更新,以切换掉其底层使用的旧版HttpWebRequest,改用HttpClient。现在RestSharp所提供的价值非常值得怀疑,而且现有代码的破坏足以让人认真考虑直接使用HttpClient。 - Keith Jackson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接