我将 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 时出现错误。
有什么办法可以纠正这个问题吗?
我刚刚遇到了同样的问题。这似乎是 Visual Studio 的一个错误,就好像您在调试时继续超越异常一样,它似乎进展正常。
这里对该问题的一些讨论: