GenericPrincipal 与 ClaimsPrincipal。 Razor 视图中用户 属性 的差异

GenericPrincipal vs ClaimsPrincipal. Difference in User property inside Razor view

我有一个项目(带 SPA 模板的 MVC5),我需要从另一个项目复制功能。 User.IsInRole() 在 Razor 中不起作用。

基本上角色是这样分配的:

var currenIdentity = httpContext.User.Identity;
var roles = new List<string>();

roles.Add(Startup.AdministrationRole);
roles.Add(Startup.UserRole);

GenericPrincipal principal = new GenericPrincipal(currenIdentity, roles.ToArray());
httpContext.User = principal;

在 Razor 我有

@if (User.IsInRole(Startup.AdministrationRole))
{
  @Html.ActionLink("Administrator »", "Config", "Admin", new { }, new { @class = "btn btn-default" })
}

在我调试的原工程中,User属性的类型是System.Security.Principal.GenericPrincipal

但是 当我在我的新项目中调试 Razor 视图时 User 属性 是另一种类型:System.Security.Claims.ClaimsPrincipal

我很好奇为什么会有差异,因此我无法直接从 System.Security.Claims.ClaimsPrincipal 检查角色?

GenericPrincipal 在自定义过滤器中分配。 问题是 Razor 视图是从 [AllowAnonymous] 控制器调用的,它覆盖了我的过滤器,因此跳过了 GenericPrincipal 给用户的分配。