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ĩ?
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();
}
}
Đây là câu trả lời đầy đủ:
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;
}
Vì tò mò, tôi có thể hỏi tại sao bạn muốn đọc cookie trên máy khách? Sự hiểu biết của tôi là cookie được sử dụng để gửi thông tin đến máy chủ, không phải để trả lại thông tin.
—
Darrel Miller
Tôi sử dụng cookie được trả về trên các lệnh gọi trả về JSON để tôi không phải thực hiện lệnh gọi ủy quyền riêng cho mỗi lệnh gọi JSON. Nghĩa là, tôi có 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ẽ phản hồi. Nếu không nó sẽ báo "403" trái phép.
—
Peter Kellner
Đặ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 đề xác thực thay mặt cho máy khách.
—
Darrel Miller
cảm ơn cho lời khuyên Darrel. Bạn có bất kỳ ví dụ nào về những gì có thể trông giống như trong asp.net không? Tôi đã vật lộn với điều này cho cảm ứng đơn của mình và bây giờ là ứng dụng cửa hàng windows của tôi. Tôi sẽ rất vui nếu có một cách đơn giản. Đây là một khó khăn, đặc biệt là với không đồng bộ và đang chờ đợi bây giờ trên các ứng dụng cửa hàng windows.
—
Peter Kellner