You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决System.Web.Mvc.HttpAntiForgeryException的三类防伪造异常?

解决System.Web.Mvc.HttpAntiForgeryException的三类常见问题

1. 防伪造Cookie令牌与表单字段令牌不匹配

  • 确认表单通过Html.BeginForm()辅助方法生成,或手动添加@Html.AntiForgeryToken()确保令牌正确生成。
  • 检查站点Cookie的域名、路径配置,确保Cookie和表单令牌的作用域一致,避免代理或反向服务器修改请求头导致令牌失效。
  • 排查用户端问题:比如浏览器缓存旧Cookie、多标签页会话冲突,可建议用户清除缓存或关闭多余标签页重试。
  • 验证服务器端配置:若自定义了AntiForgeryConfig的CookieName或CookieDomain,需确保生成和验证令牌时参数统一。

2. 缺少必填的防伪造表单字段“__RequestVerificationToken”

  • 所有POST请求的表单必须包含@Html.AntiForgeryToken(),使用Html.BeginForm()会自动生成该字段,手动写表单标签时要主动添加。
  • AJAX POST请求需手动在请求头中携带令牌:从页面隐藏字段获取令牌值,添加到headers的RequestVerificationToken字段中,示例代码:
    var token = $('input[name="__RequestVerificationToken"]').val();
    $.ajax({
        type: "POST",
        url: "/Controller/Action",
        headers: { "RequestVerificationToken": token },
        // 其他参数
    });
    
  • 检查是否有前端脚本、浏览器插件或服务器端过滤器误删除了表单中的令牌字段。

3. 提供的防伪造令牌针对空用户,但当前用户为“userID”

  • 确保生成防伪造令牌时用户已完成登录:避免在匿名状态下渲染包含令牌的页面,登录后再加载表单内容。
  • 若页面同时支持匿名和登录用户,可在Global.asax中添加配置关闭身份启发式检查(注意权衡安全性):
    protected void Application_Start()
    {
        AntiForgeryConfig.SuppressIdentityHeuristicChecks = true;
    }
    
  • 排查会话状态:用户登录后若会话未正确更新,可能导致令牌生成时的身份与提交时不一致,需验证登录逻辑是否正确写入用户身份信息。

内容的提问来源于stack exchange,提问作者Kria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 12:40:01