与this question类似,是否可以实例化客户端并保持它,或者我是否需要为每个呼叫(或一批呼叫)创建一个新实例?
答案 0 :(得分:19)
每当有疑问时,如果可能,look at the source code。
简单来看,似乎可以接受,甚至更好的方法来保持单个实例,因为它主要负责执行IRestRequest
个请求。
我曾对使用HttpClient
并发现the following的同一问题表示怀疑:
默认的HttpClient是您开始发送请求的最简单方法。 单个HttpClient可用于同时发送任意数量的HTTP请求,因此在许多情况下,您只需创建一个HttpClient,然后将其用于所有请求。
如果需要并发,请浏览源代码以查看是否存在任何陷阱。您始终可以默认返回HttpClient
,这是自.NET 4.5以来的BCL的一部分(并且可以通过.NET 4.0上的NuGet安装)
答案 1 :(得分:-4)
只要你需要调用同一个服务器来进行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
变量。我使用了两次,因为它是两个请求的基点。没有必要为每个请求复制它。
希望这有帮助。
答案 2 :(得分:-5)
尝试:
public class SecuredTaskController : ApiController
{
private IContext _context;
private ITaskService _taskService;
// other services needed for access check (eg. userService?)
public SecuredTaskController(ITaskService taskService, IContext context
// other services needed for access check (eg. userService?)
)
{
_taskService = taskService;
_context = context;
}
public IHttpActionResult Get(Task task)
{
if (hasGetAccess(task, _context.UserId))
return Ok(_taskService.Get(task));
else
return Unauthorized();
}
private bool hasGetAccess(Task task, long userId)
{
// check if userId has acces to get task
}
}