假设我具有以下路由模式
使用路线
@页面“客户”
@page“客户/ {id:int}
和类似的路由器设置:
<Router AppAssembly="typeof(Startup).Assembly">
<Found Context="routeData">
....
</Found>
<NotFound>
<p>Sorry, there's nothing at this address.</p>
</NotFound>
</Router>
如果NotFound
调用未未找到具有传递给{{1}的ID的客户,我希望页面重定向到http
页面}
现在在我的组件内部
URL
现在看来,URL中的任何有效整数都将打开CustomerDetail组件,并且当它尝试显示Customer详细信息时,它将(显然)崩溃并显示为protected override async Task OnInitializedAsync()
{
var customer = await CustomerService.GetById(customerId);
if (customer == null)
{
// redirect to 404 NOTFOUND
}
}
我缺少明显的东西吗?
编辑::我尝试加载自定义404页面并处理我的http服务中的导航,但是这导致浏览器中的URL更改。我想保留错误的URL,然后仍然导航到404页面。
答案 0 :(得分:2)
您可以使用NavigationManager
@inject NavigationManager _nagigationManager;
...
@code {
protected override async Task OnInitializedAsync()
{
var customer = await CustomerService.GetById(customerId);
if (customer == null)
{
_navigationManager.NavigateTo("404page");
}
}
}
如果您希望停留在同一页面上,但显示错误页面的内容,只需在html代码中添加组件:
@if(_notFound)
{
<NotFoundPage />
}
else
{
...
}
@code {
private bool _notFound;
protected override async Task OnInitializedAsync()
{
var customer = await CustomerService.GetById(customerId);
if (customer == null)
{
_notFound = true;
StateHasChanged();
}
}
}