4

首先我用 cookie 容器创建了 HttpClientHandler

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

然后我点击基本网址只是为了获取带有“__RequestVerificationToken”的cookie

string r = await hc.GetStringAsync(BaseUrl);

然后我将用户名/密码发布到登录网址

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 中检查请求时,我可以看到请求的 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”已交换。”

然后我无法在谷歌上得到任何关于这个错误的搜索结果。

任何想法?

谢谢

4

1 回答 1

3

发现问题。

添加到 cookie 中的“__RequestVerificationToken”与添加到表单中的不同。

所以我从返回的 Html 字符串中取了表单中“__RequestVerificationToken”的值,然后就成功了!

于 2013-04-09T06:20:42.443 回答