将单个实例维护到RestSharp客户端

gre*_*nis 7 c# restsharp

此问题类似,是否可以实例化客户端并坚持下去,或者我是否需要为每个呼叫(或一批呼叫)创建一个新实例?

Yuv*_*kov 19

每当有疑问时,如果可能的话,请查看源代码.

从简短的说来看,它似乎是可以接受的,甚至是更好的方法来保持单个实例,因为它主要负责执行IRestRequest请求.

我对同一个问题曾经有过疑问,HttpClient并发现了以下内容:

默认的HttpClient是您开始发送请求的最简单方法.一个单一的HttpClient可以用来发送尽可能多的HTTP请求,只要你想同时因此在很多情况下,您可以只创建一个HttpClient的,然后用它为您的所有要求.

如果需要并发,请浏览源代码以查看是否存在任何陷阱.你总是可以默认回到HttpClient自.NET 4.5以来它是BCL的一部分(并且可以通过.NET 4.0上的NuGet安装)

  • 是的,主要是.从Github线程的末尾开始,我引用了"AFAIK它在.NET Core上不起作用.在.NET Core 2.1中,我们引入了SocketsHttpHandler.PooledConnectionLifetime.此外,ASP.NET中新的HttpClientFactory可以利用这两者并为您." 但是,并非每个人都可以使用.NETCore 2.1 (2认同)

Bas*_*ami -6

只要您需要调用同一个服务器来发出 Rest 请求,那么只有一个 RestClient 并使用同一个客户端发出多个 RestRequest 就可以了。

C# 代码示例:

var client = new RestClient("url here"))

// First Call
var request = new RestRequest("API/Path", Method.POST);
request.AddParameter("parameter", "value");
request.AddHeader("header", "value");
var response = client.Execute(request);


// Second Call
var request2 = new RestRequest("API/Path", Method.POST);
request2.AddParameter("parameter", "value");
request2.AddHeader("header", "value");
var response2 = client.Execute(request2);
Run Code Online (Sandbox Code Playgroud)

注意这里的client变量。我已经使用了两次,因为它是两个请求的基点。没有必要为每个请求重复它。

希望这可以帮助。

  • `RestClient` 没有实现 `IDisposable`。如果确实如此并且OP使用了它,他就不会持有一个实例。他必须为每次通话初始化一个新的。 (11认同)
  • 如果“RestSharp”没有实现“IDisposable”,为什么这是公认的答案? (5认同)
  • 由于 RestClient 未实现 IDisposable,此代码甚至无法编译。此外,答案仅表明重用实例是“可能”的,而没有说明这样做是否明智。 (4认同)