我希望能够在控制器上调用身份验证操作,如果成功,则将经过身份验证的用户详细信息存储在会话中。
但是,我不确定如何将请求保留在会话中,因为我使用RestSharp作为分离的客户端。我需要以某种方式在成功授权时从服务器获取密钥,然后对于每个将来的呼叫,使用存储在会话中的密钥检查密钥。
如何确保RestSharp中的RestClient发送所有未来请求并正确设置cookie,以便在服务调用内,可以正确检索会话变量?
我一直在用HttpFactory查看cookie容器,但似乎没有关于此的任何文档。
答案 0 :(得分:31)
如果有人遇到类似问题,请注意上述内容对于简单的“在每个请求后存储我的Cookie”问题并不是必需的。 Jaffas方法可以实现,但您只需将CookieStore附加到RestClient并将Cookie自动存储 即可。 我知道这不是每个人的解决方案,因为您可能只想存储专用的 cookie。另一方面,它使您的生活更容易测试REST客户端! (为了方便起见,我使用了Jaffas变量):
CookieContainer _cookieJar = new CookieContainer();
var client = new RestClient("http://<test-server>/letteron"); //test URL
client.CookieContainer = _cookieJar;
答案 1 :(得分:7)
我最终解决了这个问题。 基本上创建一个cookie容器,然后将响应中的会话cookie添加到cookie容器中。然后,所有未来的请求都将包含此cookie。
var sessionCookie = response.Cookies.SingleOrDefault(x => x.Name == "ASP.NET_SessionId");
if (sessionCookie != null)
{
_cookieJar.Add(new Cookie(sessionCookie.Name, sessionCookie.Value, sessionCookie.Path, sessionCookie.Domain));
}