2012-01-11 70 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