引用Razor类库中的Razor页面出现404错误,求排查方案
问题原因与解决办法
你混淆了Blazor组件页面和Razor Pages页面的路由机制——你在Razor类库中创建的是带PageModel的Razor Pages(.cshtml+.cshtml.cs),但一直在用Blazor组件的路由配置,这俩完全不兼容,所以才会出现404。
具体修正步骤
1. 移除无效的Blazor路由配置
把Routes.razor里添加的AdditionalAssemblies参数删掉,恢复成默认配置:
<Router AppAssembly="typeof(Program).Assembly"> <Found Context="routeData"> <RouteView RouteData="routeData" DefaultLayout="typeof(Layout.MainLayout)" /> <FocusOnNavigate RouteData="routeData" Selector="h1" /> </Found> </Router>
这个配置只对Blazor组件(.razor文件)生效,对你的Razor Pages页面没用。
2. 正确注册Razor Pages的路由
在Program.cs里,单独注册Razor Pages路由并指定要扫描的类库程序集,替换掉你之前给Blazor组件加的AddAdditionalAssemblies(如果项目不需要共享Blazor组件的话):
// 先注册Razor Pages路由,引入类库程序集 app.MapRazorPages() .AddAdditionalAssemblies(typeof(RazorClassLibrary1.MyFeature.Pages.Page1Model).Assembly); // 保留Blazor组件的原有注册(如果项目需要Blazor功能) app.MapRazorComponents<App>() .AddInteractiveServerRenderMode();
3. 验证Razor Pages的基础配置
- 确保
Page1.cshtml.cs(PageModel文件)存在且继承自PageModel:
namespace RazorClassLibrary1.MyFeature.Pages; public class Page1Model : PageModel { public void OnGet() { // 页面逻辑 } }
- 确保
Page1.cshtml的@page指令正确,且引用了对应的PageModel:
@page "/test" @model RazorClassLibrary1.MyFeature.Pages.Page1Model <h1>Test Page</h1>
额外说明
如果你的目标是在类库中共享Blazor组件页面(而非Razor Pages),那应该在Razor类库中创建.razor文件(不是带PageModel的.cshtml),再用你之前的Blazor路由配置(Routes.razor加AdditionalAssemblies、Program.cs的AddAdditionalAssemblies),这时候才会生效。
内容的提问来源于stack exchange,提问作者Liam
相关产品推荐
相关产品推荐

