Blazor WebAssembly自定义页面路由404问题求助
针对你遇到的新增页面无法访问的问题,可按以下步骤逐一排查:
检查页面文件编译属性
右键DialogTestPage.razor文件 → 属性,确保「生成操作」设置为Content,「复制到输出目录」选择「如果较新则复制」或「始终复制」。部分情况下新增文件的编译属性会默认异常,导致页面未被打包到输出产物中。验证App.razor路由配置
确认Router组件的基础配置正确,默认模板的配置应包含项目主程序集:<Router AppAssembly="@typeof(App).Assembly"> <Found Context="routeData"> <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" /> <FocusOnNavigate RouteData="@routeData" Selector="h1" /> </Found> <NotFound> <PageTitle>Not found</PageTitle> <LayoutView Layout="@typeof(MainLayout)"> <p role="alert">Sorry, there's nothing at this address.</p> </LayoutView> </NotFound> </Router>若项目拆分了程序集,需额外添加
AdditionalAssemblies参数指定页面所在程序集,但默认单程序集模板无需此操作。排查路由模板语法
确认@page "/dialogtestpage"无多余空格、拼写错误(Blazor路由默认大小写不敏感,但建议保持路径与导航链接一致),避免使用未转义的特殊字符。强制清除浏览器缓存
按Ctrl+Shift+R强制刷新页面,或打开浏览器开发者工具(F12)→ 网络面板,勾选「禁用缓存」后重新加载项目。Blazor WASM的静态资源可能被浏览器缓存,导致新页面路由未被识别。验证页面是否被编译识别
在Program.cs中添加代码,打印所有可路由组件的路径,确认页面是否被正确编译:using Microsoft.AspNetCore.Components; using System.Reflection; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add<App>("#app"); builder.RootComponents.Add<HeadOutlet>("head::after"); // 打印所有可路由页面信息 var assembly = typeof(App).Assembly; var routablePages = assembly.GetTypes() .Where(t => t.IsSubclassOf(typeof(ComponentBase)) && t.GetCustomAttributes<RouteAttribute>().Any()); foreach (var page in routablePages) { var routes = page.GetCustomAttributes<RouteAttribute>().Select(r => r.Template); Console.WriteLine($"页面: {page.Name} | 路由: {string.Join(", ", routes)}"); } await builder.Build().RunAsync();运行项目后,查看浏览器控制台(F12→控制台),若未出现
DialogTestPage的路由信息,说明页面未被纳入编译,需检查文件是否被排除在项目外,或重新确认编译属性。确认项目目标框架配置
右键项目→属性→应用程序,确认目标框架为.NET 7.0,避免因框架版本不匹配导致编译异常。
内容的提问来源于stack exchange,提问作者Claude Nikula

