Blazor Server中使用NavigationManager跳转登录页失效问题求助
问题成因
- Blazor Server内置的Identity注册/登录页面本质是Razor Pages,不属于Blazor组件的路由管控范围,默认由服务端路由负责匹配。
NavigationManager.NavigateTo默认走Blazor客户端路由逻辑,没有匹配到对应Blazor组件就会返回404。 - 你写的跳转路径是相对路径,如果当前页面路由层级大于1,相对路径会和当前路径拼接生成错误的目标地址,导致访问失败。
- 若项目自定义过Identity的路由前缀,实际登录页路径和你填写的
Identity/Account/Login不一致也会触发404。
修复方案
调整跳转逻辑的参数即可,推荐写法如下:
<Button @onclick="@(() => navigationManager.NavigateTo("/Identity/Account/Login", forceLoad: true))">前往登录页</Button>
修改说明:
- 路径开头加
/指定为根路径,避免和当前页面路径拼接生成错误地址- 加
forceLoad: true参数,强制浏览器跳过Blazor客户端路由,直接向服务端发起请求,就能正常匹配到Razor Pages格式的Identity页面
如果是.NET 7及以上版本,也可以注入SignInManager<IdentityUser>后调用内置的跳转方法,不需要手动硬编码登录页路径。
内容的提问来源于stack exchange,提问作者SlappingTheBass12
相关产品推荐
相关产品推荐

