gpt4 book ai didi

c# - 如何在 _Layout.cshtml 中检索身份声明值

转载 作者:行者123 更新时间:2023-12-04 15:55:39 26 4
gpt4 key购买 nike

我在谷歌上搜索了很长时间,但仍然无法得到正确的答案。我正在使用身份声明进行用户身份验证,我的 _Layout.cshtml 页面中需要一些声明值。但是,我可以检索自定义身份声明值,但不能检索内置值。

这里我设置了我的身份:

 var ident = new ClaimsIdentity(
new[] {
// adding following 2 claim just for supporting default antiforgery provider
new Claim(ClaimTypes.NameIdentifier, user.LoginId),
new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", "ASP.NET Identity", "http://www.w3.org/2001/XMLSchema#string"),
new Claim(ClaimTypes.Name,user.UserName),
new Claim(ClaimTypes.Sid,user.UserId.ToString()),
new Claim("OperationType", user.OperationType.ToString()),
new Claim("ImageLink", user.ImageLink.ToString())

},
DefaultAuthenticationTypes.ApplicationCookie);
var claimsPrincipal = new ClaimsPrincipal(ident);
// Set current principal
Thread.CurrentPrincipal = claimsPrincipal;

和我的布局页面代码:

@using System.Security.Claims;
...........
@{
string userDesignation = ((ClaimsIdentity)User.Identity).FindFirst("OperationType").Value; ;
string userImage = ((ClaimsIdentity)User.Identity).FindFirst("ImageLink").Value; ;

}

我可以检索我的自定义声明 (ImageLink,OperationType) 值,但无法检索具有相同模式的 (Name,Sid)。我发现一些关于扩展方法的答案。这是检索值的唯一方法还是有任何其他方法?提前致谢

最佳答案

请在布局页面顶部使用线程命名空间

@using System.Threading;

并按以下方式访问您的声明类型

@{  
string userDesignation = ((ClaimsIdentity)User.Identity).FindFirst("OperationType").Value;
string userImage = ((ClaimsIdentity)User.Identity).FindFirst("ImageLink").Value;


var identity = (ClaimsPrincipal)Thread.CurrentPrincipal;

// Get the claims values
var id= identity.Claims.Where(c => c.Type == ClaimTypes.Sid)
.Select(c => c.Value).SingleOrDefault();
var s = id;
//so on.......
}

但是@Erik Philips 是对的。您应该将这些逻辑用作部分逻辑。

关于c# - 如何在 _Layout.cshtml 中检索身份声明值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51792577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com