You need to enable JavaScript to run this app. .NET 5.0 Razor Pages项目中.razor页面访问报"页面找不到"错误求助
优惠活动
大模型
产品
解决方案
定价
更多

.NET 5.0 Razor Pages项目中.razor页面访问报"页面找不到"错误求助

项目问题描述

基于.NET 5.0的Razor Pages项目需同时兼容.cshtml页面与.razor页面,后续逐步全量迁移至.razor实现。当前已实现在.cshtml中正常嵌入调用Razor组件,但独立.razor页面无法访问,始终返回无法找到此页面错误。已参考多篇ASP.NET Core混合托管Razor Pages与Blazor页面的教程,问题仍未解决。

现有配置明细

Startup.cs 相关配置

services.AddServerSideBlazor();
// 端点映射配置
endpoints.MapBlazorHub();
endpoints.MapFallbackToFile("/_Host.cshtml");

根目录 _Imports.razor

@using System.Net.Http
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Components
@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.JSInterop

Pages目录下 App.razor

@using Microsoft.AspNetCore.Components.Routing 
<Router AppAssembly="@typeof(Program).Assembly}">
    <Found Context="routeData">
        <RouteView RouteData="@routeData"/>
    </Found>
    <NotFound>
        <h1>Page not found123</h1>
        <p>Sorry, but there's nothing here!</p>
    </NotFound>
</Router>

Pages目录下 _Host.cshtml

@page "/blazor"
@{
    Layout = "_Layout";
}
<div id="app">
    @(await Html.RenderComponentAsync<App>(RenderMode.Server))
</div>

Pages/Shared目录下 _Layout.cshtml

<script src="_framework/blazor.server.js"></script>
@RenderSection("Scripts", required: false)

待测试页面 Pages/Test.razor

@page "/test"
@implements IDisposable
<div>test</div>

问题根因
  • 语法错误:App.razor中Router组件的AppAssembly参数表达式多了一个多余的右花括号,直接导致组件编译失败,路由无法正常扫描所有带@page特性的Razor组件。
  • 端点配置逻辑错误:
    1. 误用MapFallbackToFile方法处理动态Razor Pages页面:该方法仅适用于返回wwwroot目录下的静态文件,无法路由到_Host.cshtml这类动态编译的Razor页面。
    2. Fallback路径与实际Host页面路由不匹配:当前_Host.cshtml仅挂载在/blazor路径下,配置的fallback目标路径/_Host.cshtml在服务器端根本不存在,收到未匹配的请求(如/test)时直接返回404,无法进入Blazor客户端路由环节。
    3. 缺失Razor Pages端点映射:未显式调用MapRazorPages()注册Razor Pages路由,破坏原有cshtml页面的路由匹配逻辑。
  • 路由挂载范围缺失:_Host.cshtml仅配置了固定路径/blazor,未配置通配符子路径支持,无法承接Blazor路由的深层路径请求。

修正步骤
  1. 修正App.razor的语法错误,删除多余的右花括号:
@using Microsoft.AspNetCore.Components.Routing 
<Router AppAssembly="@typeof(Program).Assembly">
    <Found Context="routeData">
        <RouteView RouteData="@routeData"/>
    </Found>
    <NotFound>
        <h1>Page not found</h1>
        <p>Sorry, but there's nothing here!</p>
    </NotFound>
</Router>
  1. 修正_Host.cshtml的路由配置,增加通配符路径支持:
@page "/blazor/{*path:nonfile}"
@{
    Layout = "_Layout";
}
<div id="app">
    @(await Html.RenderComponentAsync<App>(RenderMode.Server))
</div>
  1. 修正Startup.cs的服务与端点配置:
    • 在ConfigureServices方法中添加services.AddRazorPages();注册Razor Pages服务
    • 在Configure方法的端点映射中调整逻辑,优先匹配Razor Pages路由,未匹配的请求统一回落到Host页面:
app.UseEndpoints(endpoints =>
{
    endpoints.MapRazorPages();
    endpoints.MapBlazorHub();
    // 对Blazor路由使用MapFallbackToPage方法,指向Host页面的实际路由路径
    endpoints.MapFallbackToPage("/blazor/{*path:nonfile}", "/_Host");
});
  1. 确认项目文件(.csproj)已启用Razor组件编译支持:
<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <RazorCompileOnBuild>true</RazorCompileOnBuild>
  </PropertyGroup>
</Project>

内容的提问来源于stack exchange,提问作者Daria Kurochkina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.01 19:54:04