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

.NET 9 Blazor Server交互式应用登录防伪造令牌报错求助

解决方案

1. 修正中间件顺序(核心修复)

你的app.UseAntiforgery()位置错误,Blazor Server交互式模式下,防伪造中间件必须在映射Razor组件之前配置,否则无法正确识别端点级的防伪造元数据调整。修改Program.cs的代码顺序:

app.UseAuthentication();
app.UseAuthorization();

// 先配置防伪造中间件,再映射Blazor组件
app.UseAntiforgery();

app.MapRazorComponents<App>()
    .AddInteractiveServerRenderMode();

2. 针对登录/注册页面禁用防伪造检查

方法A:全局端点配置

在映射Blazor组件时,通过WithAntiforgeryMetadata为指定路径关闭防伪造验证:

app.MapRazorComponents<App>()
    .AddInteractiveServerRenderMode()
    .WithAntiforgeryMetadata(endpoint => 
    {
        var routePath = endpoint.RoutePattern.RawText;
        return !string.Equals(routePath, "/login", StringComparison.OrdinalIgnoreCase) &&
               !string.Equals(routePath, "/register", StringComparison.OrdinalIgnoreCase);
    });

方法B:确保组件级属性生效

如果坚持使用组件级配置,确认Login.razor中的@attribute [IgnoreAntiforgeryToken]放置正确,同时保证中间件顺序符合上述要求即可。

3. 移除无效的自定义中间件

你之前添加的路径拦截中间件对Blazor Server交互式模式无效(防伪造验证在端点处理阶段执行,而非普通中间件管道),请删除这段代码:

// 移除该段无效代码
app.Use(async (context, next) => {
    if (context.Request.Path.StartsWithSegments("/login") || context.Request.Path.StartsWithSegments("/register")) {
        context.Features.Set<Microsoft.AspNetCore.Antiforgery.IAntiforgeryValidationFeature>(null!);
    }
    await next();
});

问题根源说明

  • app.UseAntiforgery()放在MapRazorComponents之后,导致中间件无法读取你设置的[IgnoreAntiforgeryToken]元数据。
  • Blazor Server交互式模式下,EditForm提交通过SignalR回路处理,而非传统HTTP POST,普通路径拦截逻辑无法绕过防伪造检查。
  • 移除app.UseAntiforgery()会触发错误,因为Blazor默认端点(如根路径/)已包含防伪造元数据,必须有对应中间件支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 17:36:08