성공적으로 작동하는 다음 코드가 있습니다. 응답에서 쿠키를 가져 오는 방법을 알 수 없습니다. 내 목표는 요청에 쿠키를 설정하고 응답에서 쿠키를 가져올 수 있기를 원합니다. 생각?
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();
}
}
완전한 대답은 다음과 같습니다.
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;
}
궁금해서 클라이언트에서 쿠키를 읽으려는 이유를 물어봐도 될까요? 내 이해는 쿠키가 정보를 반환하는 것이 아니라 서버에 정보를 보내는 데 사용된다는 것입니다.
—
Darrel Miller 2012
JSON을 반환하는 호출에 대해 반환 된 쿠키를 사용하므로 각 JSON 호출에 대해 별도의 인증 호출을 수행 할 필요가 없습니다. 즉, JSON을 반환하지만 권한이있는 경우에만 호출 로그 / Home / GetData가 있습니다. 클라이언트 요청에서 / Home / GetData가 응답하도록 쿠키를 추가합니다. 그렇지 않으면 "403"무단으로 표시됩니다.
—
Peter Kellner
인증 헤더를 기본 헤더로 설정하는 것은 거의 효과적이고 좀 더 표준 적입니다. 서버가 클라이언트를 대신하여 자동으로 인증 헤더를 설정할 수있는 방법은 없습니다.
—
Darrel Miller
팁 Darrel에 감사드립니다. asp.net에서 어떻게 보일지에 대한 예가 있습니까? 나는 monotouch와 이제 내 Windows 스토어 앱을 위해 이것을 고생했습니다. 간단한 방법이 있다면 기쁠 것입니다. 이것은 특히 async의 경우 고통이며 Windows 스토어 앱에서 지금 기다리고 있습니다.
—
Peter Kellner