我正在尝试创建一个Blazor应用程序以在网站上使用。大多数网站都是静态的,出于客户端性能的考虑,我希望通过静态HTML文件提供此部分。 Blazor应用程序将呈现网站的一些页面。在对此进行原型设计时,我遇到了一个问题:当从Blazor部分导航回网站的静态部分时,我得到“错误:System.InvalidOperationException:'Router'找不到带有'/ index路由的任何组件。 html”。
index.html的链接位于包含应用程序的页面的body标签中,但在app标签之外,并且应该不受Blazor的关注。我知道问题的原因是路由器找不到路由的组件,但是为什么Blazor试图找到该组件,而不是仅仅让浏览器导航到非Blazor页面?该链接应该由浏览器而不是Blazor处理,我会想到吗?
答案 0 :(得分:0)
在您网站的startup.cs
中,将app.UseBlazor()
语句更改为:
app.Map("/bzr", child => { child.UseBlazor<Blazor.Program>(); });
然后在index.html
的{{1}}中,将基本href更改为:
wwwroot
现在<base href="/bzr/" />
文件夹之外的任何内容都可以像常规网站一样工作。
答案 1 :(得分:0)
此行为是由于以下事实:路由器使用UriHelper在文档库uri(<base href="/" />
)中搜索组件。通过为您的非组件链接提供绝对uri,可以实现临时解决方案,例如:<a href="https://www.asp.net/">Asp Net<a>
尝试一下; 注意:代码应放在服务器端应用程序的Configure方法中
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
--- ---- ---
// Mount the server-side Blazor app on /subdir
app.Map("/subdir", subdirApp =>
{
subdirApp.UseBlazor<YourBlazorApp.Startup>();
});
}
来源:https://github.com/aspnet/AspNetCore/blob/master/src/Components/test/testapps/TestServer/Startup.cs