Blazor 服务器从 8 升级到 9,从静态 ssr 页面转到交互式页面时 NavigationManager.NavigateTo() 异常

问题描述 投票:0回答:1

我将 blazor 服务器 8 项目升级到 9,身份页面使用静态 ssr 模式,并具有使用此方法的 IdentityRedirectManager 类:

[DoesNotReturn]
    public async void RedirectTo(string? uri)
     {
         uri ??= "";
    
         // Prevent open redirects.
         if (!Uri.IsWellFormedUriString(uri, UriKind.Relative))
         {
             uri = navigationManager.ToBaseRelativePath(uri);
         }
    
         // During static rendering, NavigateTo throws a NavigationException which is handled by the framework as a redirect.
         // So as long as this is called from a statically rendered Identity component, the InvalidOperationException is never thrown.
         await Task.Delay(100);
         navigationManager.NavigateTo(uri); // << error here that prevents page navigation
         
         throw new InvalidOperationException($"{nameof(IdentityRedirectManager)} can only be used during static rendering.");
     }

当我登录并登录页面(静态 ssr 页面)想要重定向到主页(带有 -new InteractiveServerRenderMode(prerender: false)- 的页面)时,会引发异常,并且站点崩溃。 我把

await Task.Delay(100);
放在
navigationManager.NavigateTo(uri);
之前,仍然不起作用。

所有使用静态ssr模式的布局和页面都装饰有:

@attribute [ExcludeFromInteractiveRouting]

App.razor 中的渲染模式是这样的:

private IComponentRenderMode PageRenderMode => HttpContext.AcceptsInteractiveRouting() ? new InteractiveServerRenderMode(prerender: false) : null;

虽然该网站在 .net 8 中工作,但升级到 .net 9 时出现错误。

有什么办法可以纠正这个问题吗?

navigation blazor-server-side .net-9.0
1个回答
0
投票

我刚刚遇到了同样的问题。这似乎是 Visual Studio 的一个错误,就好像您在调试时继续超越异常一样,它似乎进展正常。

这里对该问题的一些讨论:

https://github.com/dotnet/aspnetcore/issues/58967

https://github.com/dotnet/aspnetcore/issues/53996

© www.soinside.com 2019 - 2024. All rights reserved.