我试图在处理所有不成功状态代码的Blazor服务器应用程序中创建一个httphandler。如果抛出401,我希望重定向到自定义401页面。
由于某种原因,我不能让NavigationManager在依赖注入后工作。看起来它确实加载了NavigationManager,但它从未初始化它。
public class RichardsHandler : DelegatingHandler
{
protected readonly NavigationManager _navManager;
public RichardsHandler(NavigationManager navigationManager)
{
_navManager = navigationManager;
}
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
var response = await base.SendAsync(request, cancellationToken);
_navManager.NavigateTo("/401");
return response;
}
}
我只是把NavigateTo在那里尝试导航到另一个页面,但我总是得到一个' InvalidOperationException: 'RemoteNavigationManager'尚未初始化';例外。
再次,这是一个Blazor服务器端应用程序。我是否忽略了一些东西,或者这是在导航管理器的设计?
中间件将只在应用程序的初始加载时被调用。在这之后,一切都由组成导航管理器管道的各种代码位和路由器组件在页内处理:没有回调到服务器,因此没有调用中间件。
NavigationManager
是一个DI服务,当浏览器端导航事件发生时,它从浏览器中运行的Blazor客户端代码接收数据。你不能直接从中间件访问它,因为它只存在于服务器上的Blazor Hub会话中。
如果您想在未找到和未授权请求的页面上显示特定的组件或标记,请将其编码到App.razor
中。