Blazor路由-导航到静态页面

时间:2019-01-10 18:59:05

标签: blazor

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

index.html的链接位于包含应用程序的页面的body标签中,但在app标签之外,并且应该不受Blazor的关注。我知道问题的原因是路由器找不到路由的组件,但是为什么Blazor试图找到该组件,而不是仅仅让浏览器导航到非Blazor页面?该链接应该由浏览器而不是Blazor处理,我会想到吗?

2 个答案:

答案 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