c# - 在 C# 中发布到表单 - 传递 antiforgerytoken

标签 c# antiforgerytoken

我正在尝试通过我的 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/

本文展示了如何实现您想要的:

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

关于c# - 在 C# 中发布到表单 - 传递 antiforgerytoken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24478872/

相关文章:

c# - 指定的元素已经是另一个元素的逻辑子元素。先断开它。在用户控制中

c# - 将 PDF 合并在一起后如何解锁文件以进行删除

c# - 具有 DbContext 的单例 - 在 Startup.cs 中创建实例

asp.net-web-api - ValidateAntiForgeryToken如何与可通过Web或 native 应用程序访问的Web API配合使用?

c# - 具有不同和 StringComparison.OrdinalIgnoreCase 的列表

c# - 使用 c# 和 asp.net 将 HTML 内容转换为 Pdf

asp.net-mvc-2 - 仅当调试器运行时防伪 token 异常

c# - 找不到资源 asp.net mvc

asp.net-mvc - 将 RequestVerificationToken 从 Angular js 传递到 mvc Controller

asp.net-mvc - 请求验证 token 不匹配