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

时间:2014-10-16 20:16:50

标签: c# restsharp

this question类似,是否可以实例化客户端并保持它,或者我是否需要为每个呼叫(或一批呼叫)创建一个新实例?

3 个答案:

答案 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
    }
}

来源:https://github.com/restsharp/RestSharp/wiki/Cookies