我无法在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;
}
答案 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"]">