如何在 Asp.Net Core Razor View 内获得领地
How to get claim inside Asp.Net Core Razor View
我在我的 rc1 项目中是这样做的:
User.Claims.ElementAt(#).Value
但是我切换到rtm后就不行了。当我调试 Razor 视图时,对象看起来相同,但 User.Claims 只是空的。知道原因可能是什么。
假设您有与当前委托人相关的索赔。在您的 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")
希望这对您有所帮助。
在 razor 视图中快速搜索 claims identity 得到了类似的问答:
MVC 5 Access Claims Identity User Data
在 Core 3.0 中,使用视图授权
Startup.cs
services.AddAuthorization(options =>
{
options.AddPolicy("Claim_Name", x => x.RequireClaim("Claim_Name"));
});
然后里面UI
if ((AuthorizationService.AuthorizeAsync(User, "Claim_Name")).Result.Succeeded){
//show ui element
}
在 .net 核心 2.2 中测试
在剃须刀页面中:
@User.FindFirst("nameOfClaim").值
您可以在您的视图中使用以下代码实现此目的:
if(User.FindFirst("MyClaim")?.Value == "some_value")
{
... Show concerned UI block
}
尽管如此,如果您使用策略(这是推荐的方式),我建议您在 Startup.cs/Program.cs 中定义策略并使用注入的 IAuthorizationService
来调用 AuthorizeAsync
:
if((await AuthorizationService.AuthorizeAsync(User, "MyClaim")).Succeeded)
{
... Show concerned UI block
}
这种方式更好,因为它使用定义的策略,可以验证许多不同的值。
我在我的 rc1 项目中是这样做的:
User.Claims.ElementAt(#).Value
但是我切换到rtm后就不行了。当我调试 Razor 视图时,对象看起来相同,但 User.Claims 只是空的。知道原因可能是什么。
假设您有与当前委托人相关的索赔。在您的 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")
希望这对您有所帮助。
在 razor 视图中快速搜索 claims identity 得到了类似的问答: MVC 5 Access Claims Identity User Data
在 Core 3.0 中,使用视图授权
Startup.cs
services.AddAuthorization(options =>
{
options.AddPolicy("Claim_Name", x => x.RequireClaim("Claim_Name"));
});
然后里面UI
if ((AuthorizationService.AuthorizeAsync(User, "Claim_Name")).Result.Succeeded){
//show ui element
}
在 .net 核心 2.2 中测试 在剃须刀页面中:
@User.FindFirst("nameOfClaim").值
您可以在您的视图中使用以下代码实现此目的:
if(User.FindFirst("MyClaim")?.Value == "some_value")
{
... Show concerned UI block
}
尽管如此,如果您使用策略(这是推荐的方式),我建议您在 Startup.cs/Program.cs 中定义策略并使用注入的 IAuthorizationService
来调用 AuthorizeAsync
:
if((await AuthorizationService.AuthorizeAsync(User, "MyClaim")).Succeeded)
{
... Show concerned UI block
}
这种方式更好,因为它使用定义的策略,可以验证许多不同的值。