You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor Server中多个@page "/"路由的选择逻辑:为何优先_Host.cshtml?

Blazor Server路由优先级的判定逻辑

首先要搞清楚这两个文件的本质区别:

  • _Host.cshtml是Razor Page文件,属于ASP.NET Core传统的Razor Pages路由体系,本身就能直接响应HTTP请求。
  • Index.razor是Blazor组件,它的路由由Blazor框架内部的Router组件处理,而Blazor组件必须依托_Host.cshtml这类宿主页面才能渲染。

路由匹配的顺序

ASP.NET Core的请求处理管道是按注册顺序执行的,Razor Pages的路由中间件会先于Blazor的路由逻辑运行:

  1. 当请求/路径时,ASP.NET Core先扫Razor Pages的路由表,发现_Host.cshtml带了@page "/",直接匹配成功,返回该页面内容,请求流程到此结束。
  2. 只有当Razor Pages没匹配到对应路径时,请求才会流转到Blazor的Router组件,这时Blazor才会去匹配内部组件的路由(比如Index.razor的@page "/")。

设计原因

  • 兼容现有生态:Blazor是基于ASP.NET Core构建的,得和已有的Razor Pages、MVC等路由体系共存,所以遵循「先传统路由,后Blazor路由」的顺序,确保老项目迁移到Blazor时不会乱套。
  • 宿主页面的特殊性:_Host.cshtml是Blazor应用的入口,负责加载Blazor运行时(比如_framework/blazor.server.js)。如果让Blazor组件路由先匹配,宿主页面的加载逻辑根本跑不起来,Blazor应用也就启动不了。

解决办法

要是想让Blazor组件的/路由生效,直接删掉_Host.cshtml里的@page "/"指令就行。默认的Blazor Server模板里,_Host.cshtml本来就没有这个指令,它作为宿主不需要直接响应路由请求,内部组件的路由交给Blazor的Router接管就好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:01:10