首页 > 解决方案 > 在 ASP.NET-Core 2.2 中检索给定类型的声明集合

问题描述

我已经实现了一个系统,允许用户访问给定的 url,只有他/她的声明中有那个 url。我创建了“UserRoutes”类型的声明并添加了用户可用的 URL。因此,当用户登录到应用程序时,他/她只能访问他/她的“UserRoutes”类型声明中的那些 URL。

现在我正在寻找一种方法来获取他/她的 URL 集合,以决定是否显示到给定 URL 的链接。

试试这个

  @if (User.FindAll("UserRoutes").Contains("courses/create"))
    {
    <p>
        <a asp-action="Create" class="btn btn-primary my-3"><span class="fa fa-plus-circle"></span> New Course</a>
    </p>
     }

或这个

var userRoutes = User.Claims.Where(c => c.Type == "UserRoutes");
if (userRoutes.Contains("courses/create")){
<p>
        <a asp-action="Create" class="btn btn-primary my-3"><span class="fa fa-plus-circle"></span> New Course</a>
    </p>

显示以下错误

IEnumerable' 不包含'Contains' 的定义,并且最佳扩展方法重载'ParallelEnumerable.Contains(ParallelQuery, string)' 需要'ParallelQuery 类型的接收器

请问我怎样才能做到这一点。我感谢你的努力

标签: c#asp.net-coreasp.net-identityclaims-based-identity

解决方案


您应该使用HasClaim可以传递声明类型和值的方法

User.HasClaim("UserRoutes", "courses/create")

推荐阅读