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)}'.");
    }

 

 

     

posted on 2025-06-26 17:10  博观约取*厚积薄发  阅读(19)  评论(0)    收藏  举报