18

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

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

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

我一直在用 HttpFactory 查看 cookie 容器,但似乎在任何地方都没有任何文档。

4

2 回答 2

39

如果有人遇到类似问题,请注意,对于简单的“在每次请求后存储我的 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;
于 2012-05-13T10:31:28.537 回答
13

我最终解决了这个问题。基本上创建一个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));
 }
于 2012-01-25T11:38:11.263 回答