Blazor Server中解决ASP.NET Core Identity重定向/Index报错的方法
解决Identity脚手架重定向到/Index报错的问题
问题核心是ASP.NET Core Identity生成的Razor Page代码调用RedirectToPage("/Index")时,你的Blazor项目中没有对应的Razor Page,导致服务器端报错。以下是无需修改数十个Identity文件的解决方法:
方法一:添加临时Index Razor Page
在项目的Pages文件夹下创建Index.cshtml文件,内容如下:
@page "/Index" @{ Layout = null; Response.Redirect("/", permanent: true); }
同时创建对应的Index.cshtml.cs文件(空实现即可):
using Microsoft.AspNetCore.Mvc.RazorPages; namespace YourProjectNamespace.Pages; public class IndexModel : PageModel { public void OnGet() { } }
这样Identity代码中的RedirectToPage("/Index")会找到这个页面,自动重定向到Blazor的根路径/,不会再抛出错误。
方法二:自定义重定向结果处理器
如果不想新增文件,可以通过替换MVC的RedirectToPageResultExecutor来拦截并修改目标路径:
- 在
Program.cs中注册自定义处理器:
services.AddScoped<RedirectToPageResultExecutor, CustomRedirectToPageResultExecutor>();
- 定义自定义处理器类:
using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; namespace YourProjectNamespace; public class CustomRedirectToPageResultExecutor : RedirectToPageResultExecutor { public CustomRedirectToPageResultExecutor(ILoggerFactory loggerFactory, IUrlHelperFactory urlHelperFactory) : base(loggerFactory, urlHelperFactory) { } public override Task ExecuteAsync(ActionContext context, RedirectToPageResult result) { // 拦截目标为/Index的重定向,替换为Blazor宿主页面/_Host if (result.PageName == "/Index") { result = new RedirectToPageResult("/_Host", result.PageHandler, result.RouteValues, result.Permanent, result.PreserveMethod); } return base.ExecuteAsync(context, result); } }
这个方法会在服务器端处理重定向请求时自动替换路径,无需新增页面文件。
为什么你的MapGet方法无效?
你之前尝试的app.MapGet("/Index", () => Results.Redirect("/_Host"))是客户端访问/Index时的重定向,但Identity代码的RedirectToPage("/Index")是服务器端试图找到对应的Razor Page,此时还未生成客户端跳转响应就已报错,所以该方法无法触发。
内容的提问来源于stack exchange,提问作者David Thielen
相关产品推荐
相关产品推荐

