【发布时间】:2016-09-29 15:58:14
【问题描述】:
假设我有这个声明字典:
private static Dictionary<int, List<Models.APIAccessControl>> _APIRights = GetAPIRights();
其中key代表roleId,value代表class:
public class APIAccessControl
{
public APIControllerRoute ControllerRoute { get; set; }
public APIActionRoute ActionRoute { get; set; }
public bool IsAuthorized { get; set; }
}
我正在尝试检查用户是否有权访问此 api。 我的想法是查询字典并获取角色的所有 APIAccessControl 列表,然后查询那些 APIAccessControl 列表以查找他试图导航的 APIActionRoute:
我得到了包含我想要的角色列表的字典值,但是如何将值列表转换为列表并进行以下查询:
public static bool CanAccess(int[] roleIDs, APIActionRoute apiActionRoute)
{
bool canAccess = false;
var apiAccessList = _APIRights.Where(x => roleIDs.Contains(x.Key)).Select(x => new { x.Value}).ToList();
//Querying to get all List<Models.APIAccessControl> that has any matchig APIActionRoute
}
【问题讨论】:
-
您可以尝试使用 Dictionary 的 Values 属性提取列表。
-
您能否提供示例代码来进行转换和查询,我正在尝试以优雅、干净的方式编写它。因此,如果您有任何想法,请分享您的代码。谢谢
-
您必须在 apiAccessList 上使用循环来获取所有 ActionRoutes 并将它们添加到列表中。有替代方案。你唯一能做的就是使用 Linq。让我知道这是否可以澄清任何事情
标签: c# linq dictionary lambda