自定义声明与布尔类型

时间:2017-06-21 13:38:13

标签: c# asp.net

我使用Visual Studio 2015创建ASP.NET MVC 5应用程序。我在身份验证后使用Identity框架向用户添加声明。根据内置ClaimTypes添加声明非常容易,但我在挑战时添加了一个布尔的自定义声明。

我已经创建了这个静态类来保存我的自定义声明类型:

public static class CustomClaimTypes
{
    public static readonly string IsEmployee = "http://example.com/claims/isemployee";
}

然后我尝试向ClaimsIdentity对象添加自定义声明:

userIdentity.AddClaim(new Claim(CustomClaimTypes.IsEmployee, isEmployee));

它在上面的行中给出了这个错误:

  

无法转换为' bool?'到' System.Security.Claims.ClaimsIdentity'

我发现的所有示例都在添加字符串。你如何添加bool,int或其他类型?感谢。

2 个答案:

答案 0 :(得分:5)

声明只能表示为字符串。任何数字,布尔值,指南,以及添加到索赔集合时都必须是字符串。所以ToString()它。

userIdentity.AddClaim(
    new Claim(CustomClaimTypes.IsEmployee, 
    isEmployee.GetValueOrDefault(false).ToString()));

答案 1 :(得分:4)

您还可以将 valueType 作为第三个参数传递。

userIdentity.AddClaim(
    new Claim(CustomClaimTypes.IsEmployee, 
    isEmployee.ToString(), 
    ClaimValueTypes.Boolean));

因此在前端,您将获得布尔类型值,而不是字符串。