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

从ASP.NET Core MVC重定向至传统MVC视图时出现防伪令牌问题

问题解决:ASP.NET Core POST重定向至Legacy MVC报错

错误根源

从日志可明确,问题核心是ASP.NET Core的数据保护密钥与旧ASP.NET MVC系统不兼容:Core生成的防伪令牌(存储在Cookie中)采用DataProtection加密,而Legacy系统无法识别该密钥,导致重定向过程中触发CryptographicException(密钥不在密钥环中),进而引发防伪令牌解密失败。GET跳转正常是因为GET请求不会触发防伪令牌验证逻辑。

解决方案

1. 同步Core与Legacy的加密密钥

让ASP.NET Core复用旧MVC系统的加密配置,实现跨系统令牌兼容:

  • 先安装Microsoft.AspNetCore.DataProtection.Extensions NuGet包
  • 在program.cs中配置DataProtection,使用旧MVC的机器密钥:
builder.Services.AddDataProtection()
    .SetApplicationName("你的应用名称") // 必须与旧MVC的应用名称一致
    .UseMachineKey(new MachineKeyProtectionOptions
    {
        ValidationKey = "旧MVC配置中machineKey的validationKey值",
        DecryptionKey = "旧MVC配置中machineKey的decryptionKey值",
        ValidationAlgorithm = MachineKeyValidation.HMACSHA256
    });

若旧系统使用共享密钥存储,也可配置Core将密钥持久化到共享目录:

builder.Services.AddDataProtection()
    .PersistKeysToFileSystem(new DirectoryInfo(@"\\服务器共享路径\密钥目录"))
    .SetApplicationName("你的应用名称");

2. 重定向前清除Core防伪Cookie

如果不需要Legacy系统处理Core的防伪令牌,可在POST方法中重定向前清除对应Cookie,避免浏览器携带到Legacy路径:

[HttpPost]
public async Task<IActionResult> Index(MyCoreViewModel model)
{
    if (ModelState.IsValid)
    {
        // 业务代码执行...

        // 清除Core的防伪Cookie
        var antiforgeryCookieName = ".AspNetCore.Antiforgery." + HttpContext.Request.Cookies.Keys.First(k => k.StartsWith(".AspNetCore.Antiforgery."));
        Response.Cookies.Delete(antiforgeryCookieName);

        return Redirect("/Legacy");
    }

    return View(model);
}

3. 限制防伪Cookie的作用路径

配置Core的防伪Cookie仅在Core路由路径下生效,避免重定向到Legacy时被携带:

builder.Services.AddAntiforgery(options =>
{
    options.Cookie.Path = "/Core"; // 替换为你的Core应用路由前缀
});

同时确保YARP代理配置中,Core与Legacy的路径区分明确,比如Core路径为/Core/**,Legacy为/Legacy/**。

4. 忽略Legacy路径的防伪验证

若上述方案仍有问题,可配置Core对Legacy路径跳过防伪验证:

builder.Services.AddAntiforgery(options =>
{
    options.IgnoreAntiforgeryToken = context => 
        context.Request.Path.StartsWithSegments("/Legacy");
});

验证步骤

  1. 测试Core页面的POST提交,确认业务逻辑正常执行
  2. 检查重定向到Legacy页面时是否不再报错
  3. 验证Legacy页面原有功能不受影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:26:20