Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ClaimsIdentity:添加类型为enum(或其他强类型)的索赔_C#_Enums_Claims Based Identity - Fatal编程技术网

C# ClaimsIdentity:添加类型为enum(或其他强类型)的索赔

C# ClaimsIdentity:添加类型为enum(或其他强类型)的索赔,c#,enums,claims-based-identity,C#,Enums,Claims Based Identity,有没有办法添加非字符串的声明?(在我的例子中,添加一个具有enum值的声明是我想要的,但是我想知道一般的各种类型。) 例如,这就是我想要做的: ClaimsIdentity identity = new ClaimsIdentity("my_auth_type"); identity.AddClaim(new Claim("my_claim_name", MyEnum.SomeValue)); 第二行无效,因为声明构造函数希望字符串作为第二个参数。我可以调用enumValue.ToString

有没有办法添加非字符串的声明?(在我的例子中,添加一个具有enum值的声明是我想要的,但是我想知道一般的各种类型。)

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

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

第二行无效,因为声明构造函数希望字符串作为第二个参数。我可以调用
enumValue.ToString()
,但理想情况下,让它保持强类型似乎是更好的做法。这可能吗?

您可以定义如下扩展方法:

    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);