AspNet[FromQuery]模型绑定中如何使用EnumMember值反序列化枚举。
创始人
2024-09-20 10:01:11
0
  1. 首先,需要使用EnumMember属性为枚举成员提供别名。例如:
public enum MyEnum
{
   [EnumMember(Value = "first-value")]
   FirstValue = 1,
   [EnumMember(Value = "second-value")]
   SecondValue = 2,
   [EnumMember(Value = "third-value")]
   ThirdValue = 3
}
  1. 然后,创建一个自定义模型绑定器,该绑定器在反序列化查询字符串值时使用EnumMember值。例如:
public class EnumWithEnumMemberBinder : IModelBinder
{
   private readonly IModelBinder _fallbackBinder;

   public EnumWithEnumMemberBinder(IModelBinder fallbackBinder)
   {
       _fallbackBinder = fallbackBinder;
   }

   public Task BindModelAsync(ModelBindingContext bindingContext)
   {
       var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
       var stringValue = valueProviderResult.FirstValue;

       var enumType = bindingContext.ModelType;

       if (stringValue is null || !enumType.IsEnum)
       {
           return _fallbackBinder.BindModelAsync(bindingContext);
       }

       foreach (var field in enumType.GetFields(BindingFlags.Public | BindingFlags.Static))
       {
           var memberAttribute = field.GetCustomAttribute();

           if (memberAttribute != null && memberAttribute.Value == stringValue)
           {
               bindingContext.Result = ModelBindingResult.Success(Enum.Parse(enumType, field.Name));
               return Task.CompletedTask;
           }
           else if (field.Name == stringValue)
           {
               bindingContext.Result = ModelBindingResult.Success(field.GetValue(null));
               return Task.CompletedTask;
           }
       }

       return _fallbackBinder.BindModelAsync(bindingContext);
   }
}
  1. 最后,在控制器上使用模型绑定器特性,并为枚举类型指定创建的自定义模型绑定器。例如:
public IActionResult MyAction([FromQuery(BinderType = typeof(EnumWithEnumMemberBinder))] MyEnum myEnum)
{
   // 处理枚举值

相关内容

热门资讯

微扑克有辅助透视!微扑克辅助测... 微扑克有辅助透视!微扑克辅助测试,wepoke计算辅助,教你攻略(确实真的有挂);1.微扑克辅助测试...
黑科技规律!(WPK)透视辅助... 黑科技规律!(WPK)透视辅助app,(Wpk)先前存在有挂,规律教程(有挂软件)这是由厦门游乐互动...
微扑克游戏辅助器!aapoke... 自定义微扑克游戏辅助器系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管...
黑科技安卓版!(aapOKER... 黑科技安卓版!(aapOKER)透明挂辅助插件,(aAPOKER)原本真的是有挂,AI教程(有挂透视...
黑科技好友!(WEPoke)软... 黑科技好友!(WEPoke)软件透明挂,(wePOke)好像是真的有挂,教你教程(有挂透视);1分钟...
wpk职业代打!微扑克透明挂,... 1、wpk职业代打!微扑克透明挂,poker master安卓版外挂,细节揭秘(本然是有挂)2、进入...
黑科技透明挂!(微扑克)透视辅... 黑科技透明挂!(微扑克)透视辅助脚本,(微扑克wpk)原先是有挂,辅助教程(有挂攻略)1、很好的工具...
wepoke黑科技!wopok... 这是一款非常优秀的wpk微扑克俱乐部 ia辅助检测软件,能够让你了解到wpk微扑克俱乐部中牌率当中全...
wepoke辅助!微扑克发牌规... wepoke辅助!微扑克发牌规律性总结,impoker有挂吗,2025新版总结(确实是有挂);玩家必...
黑科技安装!(wPK)透视辅助... 1、黑科技安装!(wPK)透视辅助app,(WPk)先前是真的有挂,新版2025教程(有挂方法)2、...