Blazor web App的结构——鉴权导航(四)
一 导航组件NavMenu
<NavLink class="nav-link" href="Account/Manage">中href="Account/Manage"表示导航到页面;
<Authorized>
<div class="nav-item px-3">
<NavLink class="nav-link" href="Account/Manage">
<span class="bi bi-person-fill-nav-menu" atria-hidden="true"/>@context.User.Identity?.Name
</NavLink>
</div>
<div class="nav-item px-3">
<form action="Account/Logout" method="post">
<AntiforgeryToken/>
<input type="hidden" name="ReturnUrl" value="@currentUrl" />
<button type="submit" class="nav-link">
<span class="bi bi-arrow-bar-left-nav-menu" aria-hidden="true"/>Logout
</button>
</form>
</div>
</Authorized>
在目录KBWebApp\Components\Account\Pages\Manage下有组件Index.razor, 文件形状指定组件路由:
@page "/Account/Manage"
这样便设定了路由关系:当点击相关菜单项时,便会导航到这个index组件。
另外,在相同目录下的_imports.razor组件使用@layout ManageLayout为些文件下的所有组件指定特定布局。
而ManageLayout布局在KBWebApp\Components\Account\shared文件下组件ManageLayout.razor组件中定义;面这个文件中又引用了AccountLayout.razor中定义的布局,同时嵌套了ManageNavMenu.razor组件。
二 下载
<form action="Account/Manage/DownloadPersonalData" method="post"> <AntiforgeryToken /> <button class="btn btn-primary" type="submit">Download</button> </form>
点击下载时,实际调用下边注册的方法:
manageGroup.MapPost("/DownloadPersonalData", async ( HttpContext context, [FromServices] UserManager<ApplicationUser> userManager, [FromServices] AuthenticationStateProvider authenticationStateProvider) => { var user = await userManager.GetUserAsync(context.User); if (user is null) { return Results.NotFound($"Unable to load user with ID '{userManager.GetUserId(context.User)}'."); }
浙公网安备 33010602011771号