我一直在寻找这个东西很久了,但仍然无法获得正确的答案。我正在使用身份声明进行用户身份验证,并且在_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; ;
}
我可以检索自定义的Claims( ImageLink,OperationType )值,但无法检索具有相同模式的( Name,Sid )。我发现一些关于扩展方法的答案。是检索值的唯一方法还是其他方法? 预先感谢
答案 0 :(得分:-1)
您可以使用html.RenderPartial()从布局中调用的方法来创建LayoutController(来自@Erik Philips下方的注释)。
onClick
在视图中,名称值被注入到private Button myButton;
private MediaPlayer mp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myactivity);
mp = MediaPlayer.create(this, R.raw.gunshot);
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp.start();
}
});
}
}
中。
TextInfo myTI = new CultureInfo("en-US", false).TextInfo;
var claimsIdentity = HttpContext.Current.User.Identity as System.Security.Claims.ClaimsIdentity;
var displayNameClaim = (claimsIdentity == null) ? null : claimsIdentity.Claims.SingleOrDefault(x => x.Type == ApplicationUser.DisplayNameClaimType);
var nameToDisplay = (displayNameClaim == null) ? HttpContext.Current.User.Identity.Name : displayNameClaim.Value;
var nameToDisplayTitle = myTI.ToTitleCase(nameToDisplay);
在<span class="NameDisplay"></span>
中,定义以下字段:
$(".NameDisplay").html(@Html.Raw("\"" + nameToDisplayTitle + "\""));
并定义此声明:
IdentityModels.cs