提问人:Web Dev 提问时间:11/17/2023 更新时间:11/20/2023 访问量:156
<路由器>在 Blazor 8 中未按预期工作
<Router> is not working as expected in Blazor 8
问:
我有一个正常工作的 Blazor 7 WASM 应用。它在文件中有以下代码:<Router>
App.razor
<Router AppAssembly="@typeof(Program).Assembly">
<Found Context="routeData">
<AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)">
<NotAuthorized>
<h2>You are not authorized.</h2>
<h3>To log in click <a href="/Accounts/LogIn">here</a>.</h3>
</NotAuthorized>
</AuthorizeRouteView>
</Found>
<NotFound>
<CascadingAuthenticationState>
<LayoutView Layout="@typeof(MainLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</CascadingAuthenticationState>
</NotFound>
</Router>
我在 Blazor 8 交互式 Web 程序集中移动了相同的应用,并将上述代码添加到 Server 项目(即没有 .client 的项目)的组件中。但是上面的代码不再起作用了。Routes.razor
例如,所有具有 [Authorize] 属性的应用组件现在都会引发 401 错误,而不是显示上面的部分。<NotAuthorized>
同样,导航到错误的 URL 也不会显示该部分。<NotFound>
这在 Blazor 7 中按预期完美运行,但在 Blazor 8 中不起作用。我的 Blazor 8 如下所示:Routes.razor
<Router AppAssembly="@typeof(Program).Assembly" AdditionalAssemblies="new[] { typeof(Client._Imports).Assembly }">
<Found Context="routeData">
<AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)">
<NotAuthorized>
<h2>You are not authorized.</h2>
<h3>To log in click <a href="/Accounts/LogIn">here</a>.</h3>
</NotAuthorized>
</AuthorizeRouteView>
</Found>
<NotFound>
<CascadingAuthenticationState>
<LayoutView Layout="@typeof(MainLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</CascadingAuthenticationState>
</NotFound>
</Router>
我也尝试将整个包裹在里面,但问题仍然存在。<Router>
<CascadingAuthenticationState>
可能是什么问题?我需要在哪里修复?
请帮忙。
答:
嗨,我今天在我自己迁移到 Net 8 时处理了这个问题。
本部分仅适用于 Blazor WebAssembly 应用。 Blazor Web 应用 不要使用 NotFound 模板
因此,您需要做的是在启动中添加以下行:
应用程序。UseStatusCodePagesWithReExecute(“/StatusCode/{0}”);
然后像这样制作具有相应 URL 的页面
@page “/StatusCode/404” // 未找到
@page “/StatusCode/x” // 对于除 401 之外的任何其他内容
等等。
我希望它能对你有所帮助,它对我有用。(虽然我的项目有 blazor 服务器背景)。
评论
<CascadingAuthenticationState>
@inject AuthenticationState AuthenticationState <p>IsAuthenticated: @AuthenticationState.User.Identity.IsAuthenticated</p>