Tôi có mã sau hoạt động thành công. Tôi không thể tìm ra cách để lấy cookie ra khỏi phản hồi. Mục tiêu của tôi là tôi muốn có thể đặt cookie trong yêu cầu và lấy cookie ra khỏi phản hồi. Suy nghĩ?Đấu tranh cố gắng lấy cookie ra khỏi phản hồi với HttpClient trong .net 4.5
private async Task<string> Login(string username, string password)
{
try
{
string url = "http://app.agelessemail.com/account/login/";
Uri address = new Uri(url);
var postData = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("username", username),
new KeyValuePair<string, string>("password ", password)
};
HttpContent content = new FormUrlEncodedContent(postData);
var cookieJar = new CookieContainer();
var handler = new HttpClientHandler
{
CookieContainer = cookieJar,
UseCookies = true,
UseDefaultCredentials = false
};
var client = new HttpClient(handler)
{
BaseAddress = address
};
HttpResponseMessage response = await client.PostAsync(url,content);
response.EnsureSuccessStatusCode();
string body = await response.Content.ReadAsStringAsync();
return body;
}
catch (Exception e)
{
return e.ToString();
}
}
Dưới đây là câu trả lời hoàn chỉnh:
HttpResponseMessage response = await client.PostAsync(url,content);
response.EnsureSuccessStatusCode();
Uri uri = new Uri(UrlBase);
var responseCookies = cookieJar.GetCookies(uri);
foreach (Cookie cookie in responseCookies)
{
string cookieName = cookie.Name;
string cookieValue = cookie.Value;
}
Ngoài sự tò mò, tôi có thể hỏi tại sao bạn muốn đọc cookie trên máy khách không? Sự hiểu biết của tôi là các cookie được sử dụng để gửi thông tin đến máy chủ, không phải để trả lại thông tin. –
Tôi sử dụng cookie được trả về trên các cuộc gọi trả về JSON để tôi không phải thực hiện cuộc gọi ủy quyền riêng cho từng cuộc gọi JSON. Đó là để nói, tôi có một nhật ký cuộc gọi/Home/GetData trả về JSON nhưng chỉ khi được ủy quyền. Theo yêu cầu của khách hàng, tôi thêm cookie để/Home/GetData sẽ trả lời. Nếu không, nó sẽ nói "403" trái phép. –
Đặt tiêu đề ủy quyền làm tiêu đề mặc định gần như hiệu quả và tiêu chuẩn hơn một chút. Không có cách nào để máy chủ tự động đặt tiêu đề auth thay mặt cho máy khách. –