【问题标题】:Blazor routing - navigating to a static pageBlazor 路由 - 导航到静态页面
【发布时间】:2019-06-05 17:05:21
【问题描述】:

我正在尝试创建一个在网站上使用的 Blazor 应用程序。大多数网站都是静态的,出于客户端性能的原因,我希望这部分由静态 HTML 文件提供。 Blazor 应用程序将呈现网站的一些页面。在对此进行原型设计时,我遇到了一个问题:当从 Blazor 部分导航回网站的静态部分时,我得到“错误:System.InvalidOperationException:'Router' 找不到任何带有 '/index. html'。”

index.html 的链接位于包含应用程序的页面的正文标记中,但在应用程序标记之外,它应该不在 Blazor 的注意力范围内。我知道问题的原因是路由器找不到路由的组件,但为什么 Blazor 试图找到组件而不是让浏览器导航到非 Blazor 页面?这个链接应该由浏览器处理,而不是 Blazor,我想?

【问题讨论】:

  • 如果您将 NavigationManager 注入您的页面并使用 NavigateTo(string uri, bool forceLoad) 将执行“真正的”导航,那么将向服务器发出请求。只要您的服务器返回您想要的页面,那应该可以满足您的需求。

标签: c# blazor


【解决方案1】:

在您网站的startup.cs 中,将app.UseBlazor() 语句更改为:

app.Map("/bzr", child => { child.UseBlazor<Blazor.Program>(); });

wwwroot 中的index.html 中,将基本href 更改为:

<base href="/bzr/" />

现在/bzr 文件夹之外的任何内容都可以作为常规网站使用。

【讨论】:

  • 谢谢弗洛雷斯。我找到了您对类似问题的其他答案和您的博客文章。但是,您的解决方案似乎可能适用于 Blazor 的早期版本?我有最新版本(0.7),并且在 Configure 方法中没有 app.UseBlazor() 行。另外,Configure方法的签名是Configure(IBlazorApplicationBuilder app),而IBlazorApplicationBuilder接口没有Map方法……我找对地方了吗?
  • 嗨弗洛雷斯,您的建议似乎仅适用于具有服务器端的 Blazor 应用程序 - 您知道纯客户端 Blazor 应用程序的解决方案吗?也许有一种方法可以将映射添加到路由器组件?
  • 我很确定我已经将它与客户端 blazor 一起使用..但这确实是一个旧版本..
  • 不,它不是旧版本。您已经在服务器端 Blazor 的 Configure 方法中使用了它(请注意,我指的不是 Razor 组件,而是托管在服务器上的 Blazor 客户端应用程序,尽管它也适用于 Razor 组件)。
  • 继续... 但是 Vitaly 同志明确表示他的申请是独立的。不涉及服务器。我已经建议他使用 Absolute Uri 作为他指向静态 HTML 文件的链接,因此,我相信,让路由器了解该链接不是指向组件的。无论对错,我认为 Blazor 还没有解决方案,但我相信如果您检查 Router 对象和 WebAssemblyUriHelper 以及所涉及的 JavaScript,它很容易被黑客入侵
猜你喜欢
  • 2021-07-17
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 2021-09-07
  • 2011-08-03
  • 2015-07-07
  • 2021-09-21
  • 1970-01-01
相关资源
最近更新 更多