Как войти на веб-сайт ASP.Net MVC (проверка подлинности с помощью форм) с помощью HttpClient в приложении Магазина Windows?

Сначала я создал HttpClientHandler с контейнером cookie.

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

Затем я нажимаю базовый URL-адрес, чтобы получить файл cookie с «__RequestVerificationToken».

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 отсутствует».

Но когда я проверяю запрос в fiddler, я вижу, что «__RequestVerificationToken» уже добавлен в файлы cookie запроса.

Затем я попытался войти вручную в 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 для этой ошибки.

Есть идеи?

Спасибо


person Nan Li    schedule 09.04.2013    source источник


Ответы (1)


Нашел проблему.

«__RequestVerificationToken», добавленный в файл cookie, отличается от того, который был добавлен в форму.

Итак, я взял значение «__RequestVerificationToken» в форме из возвращенной строки Html, после чего это сработало!

person Nan Li    schedule 09.04.2013
comment
Спасибо, это также помогло мне. Пожалуйста, отметьте этот ответ как ответ. - person To1ne; 23.05.2014