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

.NET 9 Blazor Server应用NavigationManager跳转认证页面失败如何解决?

解决Blazor Server中NavigationManager跳转Razor Pages页面404的问题

问题原因

Blazor Server的NavigationManager.NavigateTo默认仅处理Blazor组件路由(.razor页面),而独立账户模块的/Account/Login等页面属于Razor Pages(纯服务器端路由页面,非Blazor组件)。当直接调用NavigateTo("/Account/Login")时,Blazor会先在客户端路由表中匹配,找不到对应路由就返回404;但浏览器地址栏直接访问时,请求会直接发送到服务器,由Razor Pages路由处理,因此能正常访问。

解决方案

方案1:强制全页面刷新跳转

使用NavigateTo的重载方法,传入forceLoad: true参数,强制浏览器发起全页面请求,交由服务器端路由处理:

// Page1.razor中的按钮点击逻辑
private void GoToLogin()
{
    NavigationManager.NavigateTo("/Account/Login", forceLoad: true);
}

方案2:配置Blazor路由忽略特定路径(更优雅)

在Program.cs中添加路由忽略规则,让Blazor不处理/Account开头的请求,直接交给服务器默认路由处理:

var builder = WebApplication.CreateBuilder(args);

// 省略其他服务注册代码...

var app = builder.Build();

// 省略中间件配置代码...

app.MapBlazorHub();
app.MapFallbackToPage("/_Host");

// 添加路由忽略规则:让服务器处理Account路径下的所有请求
app.MapWhen(ctx => ctx.Request.Path.StartsWithSegments("/Account"), _ => { });

app.Run();

配置完成后,直接调用NavigationManager.NavigateTo("/Account/Login")即可正常跳转,无需强制刷新。

验证

测试跳转/Account/Login、/Account/Register等Razor Pages页面,均不会再出现404错误,功能与直接访问URL一致。

内容的提问来源于stack exchange,提问作者Norbert B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 14:39:55