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

Blazor直接输入页面URL访问404 仅NavMenu点击可正常访问

问题根因

这是Blazor Server的典型路由回退配置缺失问题,两种访问行为的差异本质是请求链路不同:

  • 点击NavMenu跳转属于Blazor运行时内部的客户端路由切换,全程不会向服务端发起页面请求,自然不会触发服务端404
  • 直接在浏览器地址栏输入https://localhost:5000/test访问时,请求会首先发送到服务端,服务端找不到匹配的物理路径或服务端路由规则时,会直接返回404响应,Blazor应用根本没机会加载,更走不到内部的组件路由匹配逻辑
  • 你提到Blazor组件可以直接地址栏访问,只是因为你单独在_Host.cshtml上给/blazor加了服务端@page路由,服务端能匹配到这个路由返回Blazor应用壳;/test没有对应的服务端路由匹配,就直接返回404空白。
修复方案

不需要给每个Blazor组件单独在_Host.cshtml加@page路由,只要配置全局路由回退规则,让所有非静态资源、非API/服务端接口的请求,统一回退到_Host.cshtml加载Blazor应用壳,后续路由交给Blazor客户端路由系统处理即可。

操作步骤

  • 打开项目中的Program.cs(.NET 6及以上版本)或Startup.cs(.NET 5及更早版本),找到中间件配置段
  • 配置全局兜底路由,所有未匹配的非文件请求都指向_Host.cshtml(注意要放在静态文件、API路由配置的后面):
    • .NET 6+ 最小API写法,替换原有零散的fallback配置:
    app.MapFallbackToPage("/_Host");
    
    • .NET 5及更早版本,在Configure方法的端点配置中添加:
    endpoints.MapFallbackToPage("/_Host");
    
  • 清理_Host.cshtml上的冗余路由配置,只保留两个路由规则即可,删掉之前单独加的@page "/blazor"这类单组件路由:
    @page "/"
    @page "/{**path}"
    
  • 重启项目验证,此时直接在地址栏输入/test路径,服务端会正常返回Blazor应用,再由客户端路由匹配到Test组件渲染,不会再出现404空白问题。

注意:如果项目有自定义的服务端页面、API接口、静态资源规则,要把这些中间件的配置顺序放在全局回退规则之前,避免被Blazor路由拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:18:16