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

如何在.NET 8 Blazor WebApp中处理无效防伪令牌错误?

在.NET 8 Blazor WebApp中处理无效防伪令牌错误

问题分析

你当前的中间件未生效的核心原因:防伪令牌验证失败时,系统通常会抛出AntiforgeryValidationException,而非直接将响应状态码设为400。默认情况下该异常会被框架处理为400响应,但你的中间件在请求管道末尾检查状态码,可能因响应已开始或异常处理逻辑先于你的中间件执行,导致重定向不生效。

解决方案

方案1:通过Antiforgery配置自定义错误处理

直接在配置Antiforgery时指定验证失败的处理逻辑,这是最直接的方式:

builder.Services.AddAntiforgery(options =>
{
    options.OnValidationFailed = context =>
    {
        // 重定向到400页面
        context.HttpContext.Response.Redirect("/400");
        return Task.CompletedTask;
    };
});

方案2:全局异常捕获中间件

如果需要统一处理这类异常,可在请求管道最前端添加异常捕获中间件,确保能拦截到AntiforgeryValidationException:

app.Use(async (context, next) =>
{
    try
    {
        await next();
    }
    catch (Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException)
    {
        if (!context.Response.HasStarted)
        {
            context.Response.Redirect("/400");
        }
    }

    // 保留原有404、400状态码处理逻辑
    if (context.Response.StatusCode == 404 && !context.Response.HasStarted)
    {
        context.Response.Redirect("/404");
    }
});

注意事项

  • 中间件顺序很关键:异常捕获中间件必须放在app.UseRouting()和app.MapBlazorHub()之前,才能优先拦截异常。
  • 确保/400页面是有效的Blazor路由或静态页面,避免出现重定向循环。
  • 若使用Blazor交互式组件(Server/WebAssembly模式),需注意交互式端点的防伪验证逻辑,保证重定向逻辑能正确触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:02:38