我正在制作一个DLL来在aspnetcore中调用REST API。
理想情况下,我希望可以通过以下方式访问它:
会话作为客户端的中间件,用于存储登录数据以便在需要时重复登录,并处理一些错误/重试并公开客户端方法。
客户端实际上执行这些调用。
理想情况下,我希望可以通过以下方式访问它:
API api = new API(clientInfo);
api.Module.Entity.Action(params);
但我很难将这变成现实。我无法创建任何静态内容,因为可能会同时存在多个会话实例。如果不通过引用传递会话,则会话状态(cookies等)可能会在副本中更改。是否应该使用某个设计模式?
public class API
{
private Session _session;
public API(ClientInfo clientInfo)
{
_session = new Session(clientInfo);
}
}
会话作为客户端的中间件,用于存储登录数据以便在需要时重复登录,并处理一些错误/重试并公开客户端方法。
public class Session
{
private Client _client;
private string _path;
public Session(ClientInfo clientInfo)
{
_client= new Client(clientInfo);
_path = clientInfo.Path;
}
public HttpResponseMessage Get(string name, string arguments = "")
{
return _client.Get(_path, name, arguments);
}
...
}
客户端实际上执行这些调用。
public class Client
{
public HttpResponseMessage Get(string path, string endpointName, string arguments)
{
return GetClient().GetAsync(path + endpointName + arguments).Result;
}
private HttpClient GetClient(){...}
...
}