Blazor Server应用是否支持深度链接?.NET 8的新Blazor模式能否简化该实现?
咱们直接给你明确答案:Blazor Server完全支持RESTful风格的深度链接,这一点和你遇到的Blazor WASM情况有本质区别。
你在WASM里碰到的<myDomain>/Units/<unitId>直接访问返回404的问题,根源在于WASM是纯客户端SPA,静态文件服务器不知道这些深层路由对应的物理文件,所以会抛出找不到资源的错误。但Blazor Server不一样,所有路由请求都会先经过服务器端的Blazor路由中间件处理——当用户直接打开/Units/123这类链接时,服务器能识别对应的路由规则,找到目标组件并传入unitId参数,正常渲染页面,完全不会出现404的情况。
再说说你关心的.NET 8:它推出的Blazor Web App统一托管模型确实把深度链接的实现变得更简单了。在这个新模式下,不管你用服务器端渲染(SSR)、交互式服务器模式还是交互式WebAssembly模式,路由系统都做了统一优化,静态文件服务器的 fallback 配置也默认处理好了深层路由。你不用再像之前WASM那样手动配置IIS的web.config重写规则、Nginx的转发规则,只要按照正常的Blazor路由语法定义页面(比如@page "/Places/Details/{id:int}"),就能直接支持深度链接,体验上更顺畅。
如果你现在还在.NET 7上用Blazor Server,也完全不用担心——.NET 7的Blazor Server已经原生支持深度链接了,只要你的组件路由定义正确,直接分享/Places/Details/550这样的链接给别人,对方打开就能正常看到对应的页面,不会出现你例子里的404问题。
总结一下:
- Blazor Server(包括.NET7版本)原生支持深度链接,无需额外复杂配置
- .NET8的Blazor Web App进一步简化了实现,不管哪种交互模式都能轻松支持RESTful风格的深度链接
备注:内容来源于stack exchange,提问作者GilShalit

