CookieContainer.Add(uri, cookie)
と要求する前にクッキーコンテナを移入、リクエストにクッキーを追加するには:ここで
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();
}
}
は完全な答えです。リクエストが行われた後、クッキーコンテナには自動的にレスポンスのすべてのクッキーが設定されます。その後、GetCookies()を呼び出してそれらを取得することができます。
CookieContainer cookies = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler();
handler.CookieContainer = cookies;
HttpClient client = new HttpClient(handler);
HttpResponseMessage response = client.GetAsync("http://google.com").Result;
Uri uri = new Uri("http://google.com");
IEnumerable<Cookie> responseCookies = cookies.GetCookies(uri).Cast<Cookie>();
foreach (Cookie cookie in responseCookies)
Console.WriteLine(cookie.Name + ": " + cookie.Value);
Console.ReadLine();
なぜ好きではないのですか?クライアントでクッキーを読んでみたいのですが?私の理解は、情報を返すためではなく、サーバーに情報を送信するためにクッキーが使用されることです。 –
JSONを返す呼び出しで返されたCookieを使用するため、JSON呼び出しごとに個別の認証呼び出しを行う必要はありません。つまり、JSONを返すコールログ/ Home/GetDataがありますが、許可されている場合に限ります。クライアントの要求では、/ Home/GetDataが応答するようにCookieを追加します。それ以外の場合は、「403」と表示されます。 –
承認ヘッダーをデフォルトヘッダーとして設定することは、ほぼ効果的でもう少し標準的です。サーバーがクライアントのためにauthヘッダーを自動的に設定する方法はありません。 –