你可以使用FindFirst(string type)
方法上ClaimsIdentity
根據索賠類型檢索索賠。在這種情況下Email
或Email2
var claimType = "Email";
var claim = identity.FindFirst(claimType);
var email = claim == null ? string.Empty : claim.Value;
我通常存儲根據權利要求類型的常量
public static partial class Constants {
public class Security {
public static class ClaimTypes {
public const string Email = "http://schemas.mycompany.com/identity/claims/email";
public const string Email2 = "http://schemas.mycompany.com/identity/claims/email2";
}
}
}
,然後創建擴展方法提取它們從IIdentity
實現,只要它是從ClaimsIdentity
的。
public static class GenericIdentityExtensions {
/// <summary>
/// Return the Email claim
/// </summary>
public static string GetEmail(this IIdentity identity) {
if (identity != null && identity.IsAuthenticated) {
ClaimsIdentity claimsIdentity = identity as ClaimsIdentity;
if (claimsIdentity != null)
return claimsIdentity.FindFirstOrEmpty(Constants.Security.ClaimTypes.Email);
}
return string.Empty;
}
/// <summary>
/// Return the Email2 claim
/// </summary>
public static string GetEmail2(this IIdentity identity) {
if (identity != null && identity.IsAuthenticated) {
ClaimsIdentity claimsIdentity = identity as ClaimsIdentity;
if (claimsIdentity != null)
return claimsIdentity.FindFirstOrEmpty(Constants.Security.ClaimTypes.Email2);
}
return string.Empty;
}
/// <summary>
/// Retrieves the first claim that is matched by the specified type if it exists, String.Empty otherwise.
/// </summary>
internal static string FindFirstOrEmpty(this ClaimsIdentity identity, string claimType) {
var claim = identity.FindFirst(claimType);
return claim == null ? string.Empty : claim.Value;
}
}