ASP.NET Core 2中如何根据登录用户控制UL标签的显示?
使用Razor身份验证控制
- 标签显示的最佳方案
完全可以用Razor的身份验证代码来包裹这些内容,这其实就是ASP.NET Core中控制登录/未登录用户界面展示的标准且简洁的做法。
你只需要用User.Identity.IsAuthenticated这个判断条件,分别包裹两个<ul>区块就行,系统会自动根据用户的登录状态渲染对应的菜单:
<!-- 已登录用户菜单 --> @if (User.Identity.IsAuthenticated) { <ul class="dropdown-menu dropdown-menu-right"> <li class="dropdown-header">Profile</li> <li> <a tabindex="-1" asp-area="" asp-controller="Manage" asp-action="Index"> <i class="si si-envelope-open pull-right"></i> <span class="badge badge-primary pull-right">3</span>Inbox </a> </li> <li> <a tabindex="-1" asp-area="" asp-controller="Manage" asp-action="Index"> <i class="si si-user pull-right"></i> <span class="badge badge-success pull-right">1</span>Profile </a> </li> <li> <a tabindex="-1" href="javascript:void(0)"> <i class="si si-settings pull-right"></i>Settings </a> </li> <li class="divider"></li> <li class="dropdown-header">Actions</li> <li> <a tabindex="-1" asp-area="" asp-controller="Account" asp-action="Lockout"> <i class="si si-lock pull-right"></i>Lock Account </a> </li> <li> <a tabindex="-1" asp-area="" asp-controller="Account" asp-action="Logout"> <i class="si si-logout pull-right"></i>Log out </a> </li> </ul> } <!-- 未登录用户菜单 --> @if (!User.Identity.IsAuthenticated) { <ul class="dropdown-menu dropdown-menu-right"> <li class="dropdown-header">Actions</li> <li> <a tabindex="-1" asp-area="" asp-controller="Account" asp-action="Login"> <i class="si si-logout pull-right"></i>Login </a> </li> <!-- 可补全未登录状态下的其他操作,比如注册 --> <li> <a tabindex="-1" asp-area="" asp-controller="Account" asp-action="Register"> <i class="si si-user-plus pull-right"></i>Register </a> </li> </ul> }
补充说明:
- 这种服务器端渲染判断比前端JS判断更安全,因为前端逻辑容易被篡改,而服务器端判断基于用户的身份验证票据,无法轻易伪造
- 你也可以简化代码结构,用
@else将两个区块串联:第一个@if包裹已登录菜单,紧接着@else包裹未登录菜单,逻辑完全一致 - 要确保你的项目已经配置了ASP.NET Core身份验证中间件,
User.Identity才能正确获取用户的登录状态
内容的提问来源于stack exchange,提问作者dinotom
相关产品推荐
相关产品推荐

