我有一个简单的 Blazor 网站 ( source code ),它在 Azure Devops 上的 iframe 中运行时存在路由问题,但在其他地方没有。
在以下条件下运行时,应用程序工作正常
但是,当我生成 Azure Devops widget 并将其上传到 Visual Studio Marketplace 时,Blazor 路由失败,因此该站点无法正确加载,如此屏幕截图所示。
该站点的源代码(只不过是默认 VS Blazor 模板的简化版本)可以在 here 中找到。
观察
Programs.cs
成功启动 - Console.WriteLine
和 Program.cs
中的 StartUp.cs
语句证明了这一点) <NotFoundContent>
(在 App.razor
中定义)标签显示在 Azure Devops iframe 我试图解决问题的事情
base href
wwwroot\index.html
定义为“/”base href
wwwroot\index.html
定义为“/dist”index.cs
属性 [Route]
文件中定义路由base href
中的 wwwroot\index.html
(这迎合了 Microsoft 对 iframe 父 URL 的任何更改) 笔记
最佳答案
不出所料,修复最终与无效路由有关。
本质上,需要使用 NavigationManager
将用户重定向到 Blazor 页面本身,如下面 app.razor
中的示例,其中目标 razor 页面包含
@page "/mypage"
@using Microsoft.AspNetCore.Components.Routing
@inject NavigationManager navigationManager
@{navigationManager.NavigateTo(@navigationManager.Uri.Replace("index.html", "") + "mypage");}
<Router AppAssembly="typeof(App).Assembly">
<Found Context="routeData">
<RouteView RouteData="@routeData" DefaultLayout="@typeof(Index)" />
</Found>
<NotFound>
<p>Sorry, there's nothing at this address.</p>
</NotFound>
</Router>
一个完整的例子可以在分支
feature/StackOverflowFix
here 中看到,它现在已经发布到 Visual Studio Marketplace 。关于azure-devops - Blazor 路由在 Azure DevOps iframe 中失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57210058/