这是我的使用案例。我有一个单例对象,它保存着全局站点状态。我的网站上有一个按钮,当点击时会在全局站点状态对象上触发一个事件。我有一个 Blazor 组件(razor),它正在监听此事件。它响应该事件并执行以下操作:
var path = "siteupdate".AddInitialQueryStringArg("returnUrl", _navManager.Uri);
_navManager.NavigateTo(path,true);
所有在线用户都会被重定向到一个Razor页面(.cshtml),该页面上会显示一条消息,提示"网站正在更新中,请稍后再来访问"。这是为了在服务器暂时关闭或更新并且与SignalR hub失去连接时,提供良好的用户体验所必需的要求。
执行后,似乎浏览器尝试导航到
siteupdate
页面,但最终被拒绝,并在我发出调用时返回到当前组件。类似于手动更新浏览器中的URL时,导航管理器会将其重置。通过在我的Razor Page 中设置断点,我可以确定大多数时间都会调用OnGet
方法,但似乎没有得到响应或其他什么问题? 我已经尝试了以下操作:尝试通过JavaScript设置窗口位置
var path = "/update".AddInitialQueryStringArg("returnUrl", _navManager.Uri);
JSRuntime.InvokeVoidAsync("BlazorHelpers.RedirectTo", path);
试图避免使用强制重新加载,这将导致404错误。
var path = "/siteupdate".AddInitialQueryStringArg("returnUrl", _navManager.Uri);
_navManager.NavigateTo(path);
参考代码位于 Pages/SiteUpdate/UpdateLandingPage.cshtml 下。 我尝试将它放在 Pages 文件夹下,但正如我之前所说的,OnGet 方法被调用了,所以路由器似乎找到了它,但是框架似乎以某种方式覆盖了 URL。谢谢。