如何将Cookie容器与RestSharp和ASP.NET会话一起使用?

时间:2012-01-11 16:59:45

标签: c# asp.net asp.net-mvc restsharp

我希望能够在控制器上调用身份验证操作,如果成功,则将经过身份验证的用户详细信息存储在会话中。

但是,我不确定如何将请求保留在会话中,因为我使用RestSharp作为分离的客户端。我需要以某种方式在成功授权时从服务器获取密钥,然后对于每个将来的呼叫,使用存储在会话中的密钥检查密钥。

如何确保RestSharp中的RestClient发送所有未来请求并正确设置cookie,以便在服务调用内,可以正确检索会话变量?

我一直在用HttpFactory查看cookie容器,但似乎没有关于此的任何文档。

2 个答案:

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