【发布时间】:2014-10-16 20:16:50
【问题描述】:
与this question 类似,是否可以实例化客户端并保留它,还是我需要为每个调用(或一批调用)创建一个新实例?
【问题讨论】:
与this question 类似,是否可以实例化客户端并保留它,还是我需要为每个调用(或一批调用)创建一个新实例?
【问题讨论】:
如有疑问,如有可能,请联系look at the source code。
从简短的角度来看,保留单个实例似乎是可以接受的,甚至是更好的方法,因为它主要负责执行 IRestRequest 请求。
我曾经对HttpClient有同样的疑问,发现the following:
默认的 HttpClient 是开始发送请求的最简单方式。 单个 HttpClient 可用于同时发送任意数量的 HTTP 请求,因此在许多情况下,您只需创建一个 HttpClient,然后将其用于所有请求。
如果需要并发,请浏览源代码以查看是否存在任何陷阱。您始终可以默认返回 HttpClient,它是自 .NET 4.5 以来 BCL 的一部分(并且可以通过 NuGet 在 .NET 4.0 上安装)
【讨论】:
虽然这篇文章看起来很旧,但我来到这里并想对实际问题进行一些更正。
问:是否可以实例化客户端并保留它,或者我是否需要为每个调用创建一个新实例
A. 不,您不需要在每个请求上重新创建,同样适用于 RestClient 或 HttpClient,如果是 RestClient,您甚至可以使用相同的 RestRequest 实例,只需更新正文,如下所示:
request.AddOrUpdateParameter("application/json", myJsonObject, RestSharp.ParameterType.RequestBody);
【讨论】:
只要你需要调用同一个服务器进行Rest Requests,只有一个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);
注意这里,client 变量。我使用了两次,因为它是两个请求的基点。没有必要为每个请求复制它。
希望这会有所帮助。
【讨论】:
using 块怎么样。
RestClient 没有实现IDisposable。如果确实如此并且OP使用了它,那么他将不会持有一个实例。他必须为他的每个调用初始化一个新的。
RestSharp 没有实现IDisposable,为什么这是公认的答案?
试试:
var client = new RestClient("http://server/");
client.CookieContainer = new System.Net.CookieContainer();
【讨论】: