如何在.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
相关产品推荐
相关产品推荐

