正常に動作する次のコードがあります。応答からCookieを取得する方法がわかりません。私の目標は、リクエストにCookieを設定し、レスポンスから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();
}
}
ここに完全な答えがあります:
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;
}
好奇心から、クライアントでCookieを読みたい理由を尋ねてもいいですか?私の理解では、Cookieは情報をサーバーに送信するために使用され、情報を返すためには使用されていません。
—
Darrel Miller
JSONを返す呼び出しで返されたCookieを使用するので、JSON呼び出しごとに個別の承認呼び出しを行う必要はありません。つまり、JSONを返すコールログ/ Home / GetDataがありますが、許可されている場合のみです。クライアント要求で、/ Home / GetDataが応答するようにCookieを追加します。それ以外の場合は、「403」が不正と表示されます。
—
Peter Kellner
Authorizationヘッダーをデフォルトのヘッダーとして設定することは、ほとんど同じくらい効果的で、もう少し標準的です。サーバーがクライアントに代わって自動的に認証ヘッダーを設定する方法はありません。
—
ダレルミラー
先端ダレルをありがとう。asp.netでどのように見えるかの例はありますか?モノタッチとWindowsストアアプリでこれに苦労しました。簡単な方法があったら幸いです。これは特にWindowsストアアプリで非同期で待機するのは面倒です。
—
Peter Kellner