我开始学习 blazor (SERVER SIDE (!)) 并面临不理解和无法在 Google 中找到我的问题的答案。
- 怎么做才能在进入网站时立即重定向到授权页面,即 该网站的所有页面仅供授权用户使用;
- 是否可以将页面转移到图书馆?我试图将授权页面转移到 Pages 文件夹中的单独库,但应用程序顽固地看不到此页面。它只打印“对不起,这个地址没有任何东西。”;
也许我对谷歌的第一个问题有部分答案,但我不确定它是否正确,我附上:
向 _Imports.razor 添加了授权属性:
@attribute [Authorize]
在 App.razor 中,我将结构更改为:
<CascadingAuthenticationState>
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
<Found Context="routeData">
<AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)">
<NotAuthorized>
<RedirectToLogin/>
</NotAuthorized>
</AuthorizeRouteView>
</Found>
<NotFound>
<LayoutView Layout="@typeof(MainLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>
</CascadingAuthenticationState>
其中 RedirectToLogin 是一个单独位于另一个库中的剃须刀组件(它可以正常工作并重定向所有内容,但看不到 /login 页面):
@inject NavigationManager navManager
@code {
protected override void OnInitialized()
{
navManager.NavigateTo("login");
}
}
/login 页面在哪里(位于路径上的另一个库中:MySite.SecondLib/Pages/Login.razor):
@page "/login"
<h1>LOGIN PAGE</h1>
我正在使用 blazor-wasm,但我认为以下内容也适用于服务器端。
第一个问题的答案。
我的替代的简短版本:
但在我的真实代码中,逻辑更复杂。您很可能会创建另一个在成功授权后调用的公共方法,例如,从同一个登录页面。示例清单:
有用的链接:
并且页面没有转移到图书馆。在一个单独的库中,我有服务、资源、api 等。在客户端(wasm)中,我连接了所有这些,放置了几个组件和 90% 的文件 - view、view.cs + viewmodel