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

.NET 8 Blazor Web App(独立账户)开箱即用密码重置时出现防伪造令牌错误

.NET 8 Blazor Web App(独立账户)开箱即用密码重置时出现防伪造令牌错误

我完全懂你的困惑——开箱即用的官方模板居然出这种问题,真的会让人怀疑是不是自己操作错了!我之前也碰到过类似的情况,这其实是.NET 8 Blazor Web App模板里中间件顺序的一个小bug,不用纠结,调整下Program.cs里的中间件配置就能解决。

具体解决步骤:

  1. 打开项目里的Program.cs文件,找到var app = builder.Build();这段代码之后的中间件配置部分
  2. 在app.UseAuthorization();之后,显式添加app.UseAntiforgery();这一行,调整后的代码示例如下:
var app = builder.Build();

// 保留原有的中间件配置,比如:
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();

// 新增这一行,确保防伪造中间件在授权之后执行
app.UseAntiforgery();

// 下面是原有的Razor组件映射代码
app.MapRazorComponents<App>()
    .AddInteractiveServerRenderMode()
    .AddInteractiveWebAssemblyRenderMode()
    .AddAdditionalAssemblies(typeof(Counter).Assembly);

为什么这个方法有效?

在.NET 8的Blazor Web App模板里,原来的UseAuthentication中间件被封装到builder.Services.AddAuthentication().AddIdentityCookies()里了(独立账户模板默认会自动添加这个),虽然你看不到显式的UseAuthentication调用,但相关的认证中间件已经被隐含加入到请求管道中。而防伪造中间件需要在认证、授权中间件之后执行,才能正确关联用户的认证状态来验证令牌,模板默认的自动添加逻辑顺序不对,才导致密码重置的POST请求无法通过防伪造验证。

如果调整中间件顺序后还是有问题,你可以检查下密码重置页面(ResetPassword.razor)的渲染模式:确保页面是交互式渲染的(比如在页面顶部加上@rendermode InteractiveServer),因为静态渲染的页面可能无法正确生成和传递防伪造令牌。不过默认模板的页面应该已经配置了正确的渲染模式,所以优先试中间件顺序的调整就好。

这个确实是模板的小问题,真不是你操作错了,很多开发者都遇到过,按上面的步骤调整后应该就能正常完成密码重置了。

备注:内容来源于stack exchange,提问作者niico

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 12:39:37