2013-11-25 96 views
3

我有一個使用基於cookie的會話進行內部使用的Web API 2項目。我創建了/api/login/api/logout動作,並且使用瀏覽器可以正常工作以訪問它。在HttpClient調用中重用會話cookie

我正在嘗試使用HttpClient來創建一個C#客戶端來與API進行通信。我可以通過登錄罰款:

Uri loginUri = new Uri("http://localhost/api", "login"); 
HttpResponseMessage response = _http.PostAsJsonAsync(loginUri, loginModel).Result; 

,我還可以通過

var cookies = _httpHandler.CookieContainer.GetCookies(uri); 
if (cookies["session_id"] != null) 
    sessionID = cookies["session_id"].Value; 

我的問題是得到Cookie中的會話ID字符串:對於包括註銷請求每個後續請求,怎麼辦我在請求標頭中包含session_id cookie?如果可能,我希望在會話期間重用HttpClient對象。我看到了this question and answer,但它用於調用登錄,執行操作以及在同一請求中註銷。

謝謝!

+0

只是出於好奇,你爲什麼要使用Web API會話? – kaptan

+0

您需要將會話ID放入哪個請求標頭?如果它是cookie標頭,那麼這將自動發生。否則使用DefaultRequestHeaders。 –

+0

@kaptan我需要保持與舊服務器的TCP連接保持活動狀態。 @DarrelMiller我需要在Set-Cookie頭中。我試過了。當我發出下一個請求時,'session-id' Cookie不在。 – Ionian316

回答

0

我結束了回去,並使用相同的FormsAuthentication我在我的MVC項目中使用的方法。因此,在撥打我的自定義MembershipProvider後,我使用FormsAuthentication方法來設置和跟蹤我的會話Cookie。我撥打FormsAuthentication.SetAuthCookie()登錄,登錄FormsAuthentication.SignOut()