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

.NET 4.8升级至.NET 8后Angular应用防伪造令牌验证异常

.NET 4.8 升级到 .NET 8 防伪造验证异常解决方案

问题复盘

升级后触发如下异常:

Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException: 所需的防伪造标头值"temp"不存在。
在 Microsoft.AspNetCore.Antiforgery.DefaultAntiforgery.ValidateRequestAsync(HttpContext httpContext)
在 namespace.ValidateAntiforgeryTokenAuthorizationFilter.OnAuthorizationAsync(AuthorizationFilterContext context)

调试执行var tokens = Antiforgery.GetAndStoreTokens(httpContext)时,发现Cookie令牌为null,但请求令牌不为null,核心原因是.NET 8 对防伪造验证的逻辑、Cookie存储规则做了变更,与.NET Framework 4.8的实现不兼容。

可行解决方法

  • 同步自定义防伪造配置:如果项目自定义了防伪造的标头名称(比如这里的"temp")或Cookie名称,需在.NET 8的AddAntiforgery配置中统一设置,示例代码:
    builder.Services.AddAntiforgery(options =>
    {
        options.HeaderName = "temp"; // 匹配自定义标头名称
        options.Cookie.Name = ".AspNetCore.Antiforgery.YourCustomCookieName"; // 同步自定义Cookie名称
        options.Cookie.SameSite = SameSiteMode.Lax; // 根据站点场景调整SameSite属性,避免Cookie被浏览器拦截
        options.Cookie.Secure = true; // HTTPS站点需开启此配置
    });
    
  • 适配Cookie存储策略:.NET 8中防伪造Cookie的默认SameSite、HttpOnly、Secure属性与旧版本不同,跨域场景需将SameSite设为None并配合Secure=true;非HTTPS环境则调整为SameSite=Lax。
  • 检查自定义过滤器逻辑:确认ValidateAntiforgeryTokenAuthorizationFilter中是否正确读取Cookie令牌,.NET 8的Antiforgery API读取逻辑有变化,可直接通过httpContext.Request.Cookies读取对应名称的Cookie,再传入验证方法。
  • 清除旧Cookie缓存:旧.NET Framework生成的防伪造Cookie与.NET 8不兼容,清除浏览器缓存和Cookie后重新生成令牌即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:40:58