在 Blazor 服务器中,如果您尝试从匿名组件(没有经过身份验证的组件)重定向到需要身份验证的页面,则可能会收到“对不起,此地址上没有任何内容”的错误消息。
要解决这个问题,您需要在匿名组件的 OnInitializedAsync 方法中检查用户是否已经登录。如果用户未登录,则可以使用 NavigationManager 对象将用户重定向到登录页面。以下是一些示例代码,说明如何在 Blazor 服务器中解决此问题:
@page "/anonymous-page"
@inject NavigationManager NavigationManager
@inject AuthenticationStateProvider AuthenticationStateProvider
@code {
[Parameter]
public string Id { get; set; }
protected async override Task OnInitializedAsync()
{
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
if (authState.User.Identity.IsAuthenticated)
{
// 用户已登录,将继续加载该页面
}
else
{
// 用户未登录,将会重定向到登录页面
NavigationManager.NavigateTo("/login", true);
}
}
}
在上面的代码中,我们使用了 OnInitializedAsync 方法来检查用户是否已经登录。如果用户已经登录,则该页面将继续加载。否则,我们使用 NavigationManager 对象将用户重定向到登录页面。
请注意,我们还需要注入 AuthenticationStateProvider 对象,以便在 OnInitializedAsync 方法中获取用户的身份认证状态。如果您在应用程序中引入了类似 IdentityServer4 的身份验证库,则可以通过注入该库的相应服务来检查用户是否已登录。