Tôi muốn tạo dịch vụ đăng nhập demo trong api trên web và cần đặt cookie trên phản hồi. Làm thế nào để làm điều đó? Hoặc có cách nào tốt hơn để thực hiện ủy quyền không?Làm cách nào để đặt cookie phản hồi trên HttpReponseMessage?
Trả lời
Thêm một tham chiếu đến System.Net.Http.Formatting.dll
và sử dụng phương pháp AddCookies
mở rộng định nghĩa trong lớp HttpResponseHeadersExtensions
.
Đây là a blog post describing this approach và MSDN topic.
Nếu lắp ráp đó không phải là một lựa chọn cho bạn, đây là câu trả lời cũ của tôi từ trước khi điều này là một lựa chọn:
Cũ hơn câu trả lời sau
tôi thích một cách tiếp cận mà chỉ nằm trong lĩnh vực HttpResponseMessage
mà không chảy máu vào HttpContext mà không phải là đơn vị có thể kiểm tra và không luôn luôn áp dụng tùy thuộc vào máy chủ:
/// <summary>
/// Adds a Set-Cookie HTTP header for the specified cookie.
/// WARNING: support for cookie properties is currently VERY LIMITED.
/// </summary>
internal static void SetCookie(this HttpResponseHeaders headers, Cookie cookie) {
Requires.NotNull(headers, "headers");
Requires.NotNull(cookie, "cookie");
var cookieBuilder = new StringBuilder(HttpUtility.UrlEncode(cookie.Name) + "=" + HttpUtility.UrlEncode(cookie.Value));
if (cookie.HttpOnly) {
cookieBuilder.Append("; HttpOnly");
}
if (cookie.Secure) {
cookieBuilder.Append("; Secure");
}
headers.Add("Set-Cookie", cookieBuilder.ToString());
}
Sau đó, bạn có thể đưa cookie vào phản hồi như thế này:
HttpResponseMessage response;
response.Headers.SetCookie(new Cookie("name", "value"));
Tôi đồng ý, điều này trông giống như một lựa chọn tốt hơn. Đã thay đổi câu trả lời được chấp nhận để hướng dẫn người dùng trong tương lai. –
Có thể đây không còn là câu trả lời nữa? Cách duy nhất tôi đã tìm thấy dll này là thông qua Nuget và nó rõ ràng nói rằng nó là dành cho WebApi.Client cao hơn 2.0 và thấp hơn 2.1, vì vậy câu trả lời này là cho WebApi 2. Chúng tôi bây giờ với ASP.NET 4 và tôi không thể tìm thấy dll này nữa. –
@IsaacLlopis Tôi đoán họ đã chuyển nó từ phần mở rộng dll vào lõi. –
Bạn có thể thêm cookie vào bộ sưu tập HttpContext.Current.Response.Cookies.
var cookie = new HttpCookie("MyCookie", DateTime.Now.ToLongTimeString());
HttpContext.Current.Response.Cookies.Add(cookie);
Cảm ơn bạn, chính xác những gì tôi muốn và nên nghĩ đến bản thân mình. Nhưng thực sự hy vọng rằng sẽ có sẵn trên 'HttpResponseMessage'. –
Đó là phỏng đoán đầu tiên của tôi, nhưng vì lý do nào đó không phải vậy. Điều đó chắc chắn sẽ tốt hơn cho khả năng kiểm tra. – Maurice
Câu trả lời này đi ngược lại cách sử dụng WebAPI. Bạn không nên tham khảo HttpContext.Current từ WebAPI vì điều này sẽ không tồn tại nếu bạn tự lưu trữ. Các bit beta thiếu tải các tiện ích trợ giúp như thế này. RC đã thêm phương thức mở rộng AddCookies() vào HttpResponseMessage.Headers mà bạn nên sử dụng thay thế. – Andrew
- 1. Đặt cookie theo phản hồi nguy hiểm
- 2. Phản hồi AJAX có thể đặt cookie không?
- 3. Làm cách nào để lưu cookie từ phản hồi cho yêu cầu cURL bằng php?
- 4. jQuery $ .cookie không đọc cookie được đặt bởi phản hồi của máy chủ
- 5. Cách đặt tên tệp theo phản hồi
- 6. Làm cách nào để đặt cookie trên HttpRequestMessage của HttpClient
- 7. Có cách nào để đọc cookie từ đối tượng phản hồi trong Java không?
- 8. Cookie phản hồi không được thiết lập bởi Chrome & IE
- 9. Làm cách nào để đặt cookie ở Jersey?
- 10. Làm cách nào để chuyển đổi từ tiêu đề 'set-cookie' phản hồi để yêu cầu tiêu đề 'cookie' trong phun?
- 11. Làm cách nào để xóa luồng phản hồi của HttpListener?
- 12. Làm cách nào để xóa tiêu đề phản hồi HTTP?
- 13. Làm cách nào để kiểm tra phản hồi 302? WebRequest
- 14. Tại sao Cookie có sẵn trong Yêu cầu ngay sau khi cài đặt bằng Phản hồi?
- 15. Nếu có một phản hồi cookie thiết lập từ một xmlhttprequest, trình duyệt sẽ tôn trọng nó và đặt cookie?
- 16. Làm cách nào để đặt id của div làm cookie?
- 17. C# Nhận cookie từ phản hồi của máy chủ được cung cấp trên dữ liệu POST
- 18. Cách xóa một số cookie nhất định khỏi phản hồi nginx
- 19. Có cách nào để đặt thời gian chờ phản hồi cho Indy Tidhttp không?
- 20. Làm cách nào để tôi đặt nhiều cookie với CherryPy
- 21. Làm cách nào để đặt cookie HttpOnly trong Django?
- 22. Làm cách nào để đặt cookie cho Http Get Request?
- 23. Cách bật phản hồi xúc giác trên giao diện nút
- 24. Cách đặt Cookie bằng NSURLRequest?
- 25. Mở phản hồi trên cửa sổ mới
- 26. Phản hồi GZip trên IIS Express
- 27. Phản hồi Haptic Qt trên android
- 28. Làm cách nào tôi có thể phản hồi các sự kiện chạm trên UITextField?
- 29. Làm cách nào để xóa cookie HttpOnly?
- 30. Cách nhận phản hồi của người dùng?
Có vẻ như bạn không thể đặt cookie trên HttpResponseMessage. Hãy xem chủ đề này, có lẽ nó sẽ giúp http://stackoverflow.com/questions/5463431/setting-cookies-within-a-wcf-service –