如何将属性添加到@ User.Identity或在剃刀页面上声明使用

时间:2019-04-04 00:07:00

标签: c# asp.net-core

我无法在ASP.NET Core中扩展我的Identity属性以在剃刀页面中使用,就像这样:

<input type="text" class="hidden" name="Id" id="Id" value="@User.Identity.Id">

我尝试使用它,但是不起作用:

public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<AppUser> manager)
{
    var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
    userIdentity.AddClaim(new Claim("Id", this.PublicId));
    return userIdentity;
}

1 个答案:

答案 0 :(得分:0)

尝试使用IClaimsTransformation

public class CustomClaimsTransformer:IClaimsTransformation
{
    public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
    {
        ((ClaimsIdentity)principal.Identity).AddClaim(new Claim("Id", Claim.Value you want));
        return Task.FromResult(principal);
    }
}

向Startup.cs添加声明转换服务

 services.AddTransient<IClaimsTransformation, CustomClaimsTransformer>();

然后尝试HttpContext.User.Claims检索用户的声明,但是它将用于子请求而不是当前的登录请求。

 ViewData["Id"] = HttpContext.User.Claims.First(c => c.Type == "Id").Value;

在Razor页面中

<input type="text" class="hidden" name="Id" id="Id" value="@ViewData["Id"]">