ASP.NET Core Identity注册确认跳转报错:找不到/Index页面
核心问题
Identity脚手架生成的是MVC Razor Pages代码,而你的Blazor Server应用主页是Razor组件(Index.razor),并非MVC体系的Razor Page(.cshtml文件)。RedirectToPage("/Index")是MVC Razor Pages专属跳转方法,它会寻找名为Index.cshtml的MVC页面,但你的项目里没有这个文件,因此触发“找不到页面”的异常。
直接在浏览器访问/Index能显示内容,是因为Blazor路由系统接管了该路径,返回的是Blazor内置的NotFound组件,和MVC的页面跳转逻辑属于两套完全独立的体系。
解决步骤
修改RegisterConfirmation.cshtml.cs的跳转代码:
将原代码中的return RedirectToPage("/Index");替换为以下两种方式之一:- 直接重定向到Blazor根路径(推荐):
return Redirect("/"); - 如果项目中存在带Index动作的MVC HomeController,也可以使用:
return RedirectToAction("Index", "Home");
- 直接重定向到Blazor根路径(推荐):
检查并统一所有Identity页面的跳转逻辑:
遍历Identity脚手架生成的所有页面(如Login.cshtml.cs、Register.cshtml.cs、ForgotPassword.cshtml.cs等),找到所有使用RedirectToPage("/Index")的代码,全部替换为上述适配Blazor的重定向方式。
额外说明
无需修改Blazor的路由设置,只要把MVC Identity页面中的跳转逻辑从MVC专属的RedirectToPage改为通用的Redirect或RedirectToAction,就能让跳转逻辑适配Blazor的路由系统。
内容的提问来源于stack exchange,提问作者David Thielen

