我试图通过我的C#应用程序发布表单。
我的问题是给定的令牌无效且帖子失败。
当我查看浏览器并阅读GET响应时,它会提供正确的令牌。我试图在我的应用程序中执行相同操作但由于某种原因,我得到的呈现令牌无效。
我想从服务器获得第一个实际获取以获取第一个表单数据。我做错了吗?
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(linkToArticle);
req.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
string rawHtml = readStream.ReadToEnd();
string token = getToken(rawHtml);
response.Close();
readStream.Close();
var loginData = new NameValueCollection();
loginData.Add("__RequestVerificationToken", token);
loginData.Add("cbTerms", "on");
Console.WriteLine("token: "+ token);
Console.WriteLine("id: "+ id);
client.UploadValues("/Form/?aid="+id, "POST", loginData);
答案 0 :(得分:5)
您还需要一个名为 __ RequestVerificationToken 的Cookie,其中包含令牌值。这样可以确保发布表单的用户是显示该表单的用户。
您可以在本文中详细了解该过程: http://blog.stevensanderson.com/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/
本文介绍了如何实现您的目标: