在C#中发布到表单 - 通过antiforgerytoken

时间:2014-06-29 18:19:30

标签: c# antiforgerytoken

我试图通过我的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);

1 个答案:

答案 0 :(得分:5)

您还需要一个名为 __ RequestVerificationToken 的Cookie,其中包含令牌值。这样可以确保发布表单的用户是显示该表单的用户。

您可以在本文中详细了解该过程: http://blog.stevensanderson.com/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

本文介绍了如何实现您的目标:

http://adam.kahtava.com/journal/2009/11/25/what-are-anti-cross-site-request-forgery-tokens-and-what-are-they-good-for/