2012-01-11 34 views
8

Tôi muốn có thể gọi hành động xác thực trên bộ điều khiển và nếu nó thành công, hãy lưu trữ chi tiết người dùng được xác thực trong phiên.Làm cách nào để sử dụng vùng chứa cookie với các phiên RestSharp và ASP.NET?

Tuy nhiên, tôi không chắc chắn cách giữ các yêu cầu bên trong phiên khi tôi đang sử dụng RestSharp làm ứng dụng khách tách rời. Tôi cần bằng cách nào đó lấy lại chìa khóa từ máy chủ về ủy quyền thành công và sau đó cho mỗi cuộc gọi trong tương lai, hãy kiểm tra khóa có khóa được lưu trữ trong phiên.

Làm cách nào để đảm bảo RestClient trong RestSharp gửi tất cả các yêu cầu trong tương lai với cookie được đặt đúng như vậy bên trong các cuộc gọi dịch vụ, biến phiên có thể được truy xuất chính xác?

Tôi đã xem xét vùng chứa cookie với HttpFactory nhưng dường như không có bất kỳ tài liệu nào về điều này ở bất kỳ đâu.

+0

Ngoài câu trả lời kiểm tra chấp nhận giải pháp từ @PeterBranforn, nó là đơn giản hơn nếu bạn không cần phải quản lý cookie phức tạp. –

Trả lời

4

Tôi đã làm việc này cuối cùng. Về cơ bản tạo vùng chứa cookie, sau đó thêm cookie phiên từ phản hồi vào vùng chứa cookie. Tất cả các yêu cầu trong tương lai sẽ chứa cookie này.

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

Nếu ai đó gặp sự cố tương tự, xin lưu ý rằng không bắt buộc phải có vấn đề "lưu trữ cookie của tôi sau mỗi yêu cầu" đơn giản. Cách tiếp cận Jaffas ở trên hoạt động, nhưng bạn có thể chỉ cần đính kèm một CookieStore vào RestClient của bạn và để cookie được lưu trữ tự động. Tôi biết đây không phải là giải pháp cho tất cả mọi người, vì bạn có thể muốn lưu trữ chỉ dành riêng cho các cookie. Mặt khác, nó giúp cuộc sống của bạn dễ dàng hơn khi thử nghiệm một máy khách REST! (tôi đã sử dụng các biến Jaffas để dễ):

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

Tôi đã tạo RestClient qua "http: // localhost /" và nó không hoạt động (hộp chứa cookie, nhưng nó không được chuyển tiếp). Tôi đã thay đổi nó thành "http: //127.0.0.1/" và tất cả đều hoạt động tốt. Giải pháp của Jaffa đã làm việc trong cả hai trường hợp. –

Các vấn đề liên quan