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

.NET 6 MVC中AntiForgeryToken验证失败问题求助

排查思路:.NET 6 MVC+Web API中AJAX POST防伪令牌400错误

一、针对SearchProduct请求首次成功后失效的问题

  • 检查PartialView是否包含新的防伪令牌:首次请求后服务器会刷新防伪令牌,若你用PartialView替换#divToBeReplaced区域时,PartialView里未重新生成@Html.AntiForgeryToken(),页面保留的旧令牌会导致二次请求触发400错误。解决方式是在PartialView中添加@Html.AntiForgeryToken(),或在AJAX请求成功后从新DOM中提取最新令牌值用于下一次请求。
  • 确认令牌复用规则:.NET默认防伪令牌为一次性有效,验证后即失效,不能重复使用,每次AJAX请求必须获取页面中__RequestVerificationToken隐藏域的最新值。

二、针对DeleteCheckedProduct请求始终400的问题

  • 核对令牌传递的参数/头名称:
    • 若放在请求数据中,参数名必须为__RequestVerificationToken(注意前后两个下划线);
    • 若放在请求头中,默认头名称是RequestVerificationToken(无下划线),若自定义过配置,需与Program.cs中AddAntiforgery的HeaderName一致。
  • 检查请求Content-Type:
    • 使用application/json格式时,令牌需作为JSON对象的一个属性传递;
    • 使用application/x-www-form-urlencoded格式时,令牌需作为表单参数传递。Content-Type不匹配会导致服务器无法解析令牌。
  • 确认Web API的防伪配置:Web API默认不启用防伪验证支持,需在Program.cs中显式配置:
    builder.Services.AddAntiforgery(options =>
    {
        options.HeaderName = "RequestVerificationToken"; // 自定义请求头名称,按需调整
    });
    
    同时确保Web API的Action上的[ValidateAntiForgeryToken]属性生效,或添加全局过滤器启用防伪验证。

三、Program.cs全局防伪配置检查

  • 确认已正确注册防伪服务:必须包含builder.Services.AddAntiforgery();,若有自定义配置,需检查以下项:
    • Cookie的SameSite属性:本地开发环境避免设置为Strict,否则可能导致Cookie无法传递;
    • Secure属性:本地HTTP环境需设置为false,否则Cookie不会被发送;
    • 令牌有效期:默认有效期较短,若请求间隔过长也可能导致失效。
  • 若MVC和Web API共用防伪服务,需确保两者配置一致,避免Cookie或令牌规则不匹配。

四、浏览器端令牌与Cookie匹配验证

  • 打开浏览器开发者工具的Network标签,查看请求的:
    • Cookie中是否存在__RequestVerificationToken_Cookie(默认名称,若自定义则对应配置的名称);
    • 请求数据/头中的令牌值是否与Cookie中的令牌配对;
    • 确认请求是否携带了正确的Cookie,排查SameSite、跨域(若存在)等导致Cookie未传递的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:01:26