我正在尝试通过我的 C# 应用程序发布一个表单。
我的问题是给定的 token 无效并且发布失败。
当我查看浏览器并读取 GET 响应时,它给出了正确的标记。我正在尝试在我的应用程序中执行相同的操作,但由于某种原因,我获得的呈现 token 无效。
我想从服务器上获取第一个实际的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);
最佳答案
您还需要一个名为 __RequestVerificationToken 的 cookie 以及 token 值。这可确保发布表单的用户就是显示表单的用户。
您可以在本文中阅读有关该过程的更多信息: http://blog.stevensanderson.com/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/
本文展示了如何实现您想要的:
关于c# - 在 C# 中发布到表单 - 传递 antiforgerytoken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24478872/