2012-01-11 32 views
8

我希望能够在控制器上调用身份验证操作,如果成功,请在会话中存储身份验证的用户详细信息。如何将Cookie容器与RestSharp和ASP.NET会话一起使用?

但是,我不知道如何保持会话内的请求,因为我将RestSharp用作分离客户端。我需要以某种方式从成功授权的服务器获取密钥,然后在将来的每次调用时,检查会话中存储的密钥。

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

我一直在寻找与HttpFactory的cookie容器,但似乎没有任何文档在这个任何地方。

+0

除了公认的答案结帐从@PeterBranforn的解决方案,它更简单,如果你不需要复杂的cookie管理。 – 2014-07-07 18:47:03

回答

4

我最终这样做了。 基本上创建一个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)); 
} 
24

如果有人有类似的问题,请注意,上面是不是很需要一个简单的问题,“我的存储每个请求后曲奇”。 Jaffas的方法上面的作品,但你可以简单地将一个CookieStore附加到你的RestClient,并有自动存储饼干。 我知道这不是一个适合所有人的解决方案,因为您可能需要专门存储专用 Cookie。另一方面,它使您的生活更轻松地测试REST客户端! (我用来便于Jaffas变量):

 CookieContainer _cookieJar = new CookieContainer(); 
     var client = new RestClient("http://<test-server>/letteron"); //test URL 
     client.CookieContainer = _cookieJar; 
+0

我创建了RestClient传递“http:// localhost /”并且它不起作用(容器获得了cookie,但是没有传递给它)。我将它改为“http://127.0.0.1/”,并且一切正常。雅法的解决方案适用于这两种情况。 – 2015-08-24 14:42:04