如何在Asp.Net Core Razor View中获取声明

时间:2016-08-24 13:56:54

标签: asp.net-mvc razor claims rtm .net-core-rc1

我在我的rc1项目中做过:

User.Claims.ElementAt(#).Value

但是在我改用rtm之后它就再也行不通了。当我调试Razor视图时,对象看起来相同,但User.Claims只是空的。不知道原因是什么。

3 个答案:

答案 0 :(得分:21)

假设您已向当前委托人提出索赔。在你的Razor视图中:

@((ClaimsIdentity) User.Identity)

这将使您可以访问当前用户的ClaimsIdentity。为了使您的声明保持清洁,您可能需要创建一种搜索声明的扩展方法。

public static string GetSpecificClaim(this ClaimsIdentity claimsIdentity, string claimType)
{
    var claim = claimsIdentity.Claims.FirstOrDefault(x => x.Type == claimType);

    return (claim != null) ? claim.Value : string.Empty;
}

然后,您只需访问所需的任何声明:

@((ClaimsIdentity) User.Identity).GetSpecificClaim("someclaimtype")

希望这有帮助。

在剃须刀视图中快速搜索声明标识提出了类似的问题和答案: MVC 5 Access Claims Identity User Data

答案 1 :(得分:3)

在.net core 2.2中测试 在剃须刀页面中:

@ User.FindFirst(“ nameOfClaim”)。Value

答案 2 :(得分:0)

在Core 3.0中,使用视图授权

Startup.cs

    services.AddAuthorization(options =>
    {
        options.AddPolicy("Claim_Name", x => x.RequireClaim("Claim_Name"));
    });

然后在用户界面内

    if ((AuthorizationService.AuthorizeAsync(User, "Claim_Name")).Result.Succeeded){
        //show ui element
    }

View-based authorization in ASP.NET Core MVC