4

最初に、Cookie コンテナーを使用して HttpClientHandler を作成しました

CookieContainer cookies = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler();
handler.CookieContainer = cookies;
handler.UseCookies = true;
var hc = new HttpClient(handler);

次に、「__RequestVerificationToken」で Cookie を取得するためだけにベース URL にアクセスします。

string r = await hc.GetStringAsync(BaseUrl);

次に、ユーザー名/パスワードをログイン URL に投稿します。

HttpContent content = new FormUrlEncodedContent(new[]
{
    new KeyValuePair<string, string>("UserName", "admin"),
    new KeyValuePair<string, string>("Password", password),
});
HttpResponseMessage response = await hc.PostAsync(LoginUrl, content);

次に、「必要な偽造防止フォーム フィールド "__RequestVerificationToken" が存在しません」というサーバー エラーが表示されます。

しかし、フィドラーでリクエストを確認すると、リクエストの Cookie に「__RequestVerificationToken」が既に追加されていることがわかります。

次に、IEに手動でログインして、IEが送信したリクエストの種類を確認しました。

次に、IEも「__RequestVerificationToken」をフォームに入れていることを発見したので、フォームにCookieを追加しました

new KeyValuePair<string, string>("__RequestVerificationToken", cookies.GetCookies(new Uri(BaseUrl)).Cast<Cookie>().FirstOrDefault(x => x.Name == "__RequestVerificationToken").Value)

次に、このエラーが発生しました

「提供された偽造防止トークンの検証に失敗しました。Cookie "_ RequestVerificationToken" とフォーム フィールド " _RequestVerificationToken" が交換されました。」

その後、このエラーに対して Google で検索結果を取得できませんでした。

何か案が?

ありがとう

4

1 に答える 1