ClaimsIdentity:使用类型枚举(或其他强类型)添加声明

时间:2015-02-16 18:54:27

标签: c# enums claims-based-identity

有没有办法添加不是字符串的声明? (就我而言,添加一个具有枚举值的声明是我想要的,但我一般都想知道各种类型。)

例如,这就是我想要做的事情:

ClaimsIdentity identity = new ClaimsIdentity("my_auth_type");
identity.AddClaim(new Claim("my_claim_name", MyEnum.SomeValue));

第二行无效,因为Claim构造函数期望将字符串作为第二个参数。我可以打电话给enumValue.ToString(),但理想情况下,将它强烈打印似乎是一种更好的做法。这可能吗?

1 个答案:

答案 0 :(得分:3)

您可以像这样定义扩展方法:

    public static void AddEnumClaim<T>(this ClaimsIdentity identity, String type, T enumvalue)
            where T : struct
    {
        if (!typeof(T).IsEnum)
            throw new ArgumentException("AddEnumClaim must be an enum");
        identity.AddClaim(new Claim(type, enumvalue.ToString()));
    }

并将其命名为:

identity.AddEnumClaim("my_claim_name", MyEnum.SomeValue);