zoukankan      html  css  js  c++  java
  • ASP.NET Core 3.x RESTful API学习记录--自定义模型绑定

     public class ArrayModelBinder: IModelBinder
        {
            /// <summary>
            /// bindingContext model的源数据
            /// </summary>
            /// <param name="bindingContext"></param>
            /// <returns></returns>
            public Task BindModelAsync(ModelBindingContext bindingContext)
            {
                if (!bindingContext.ModelMetadata.IsEnumerableType)
                {
                    bindingContext.Result = ModelBindingResult.Failed();//返回失败
                    return Task.CompletedTask;
                }
    
                var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName).ToString();
    
                if (string.IsNullOrWhiteSpace(value))
                {
                    bindingContext.Result = ModelBindingResult.Success(null);
                    return Task.CompletedTask;
                }
    
                var elementType = bindingContext.ModelType.GetTypeInfo().GenericTypeArguments[0];
                var converter = TypeDescriptor.GetConverter(elementType);//转换器
    
                var values = value.Split(new[] {","}, StringSplitOptions.RemoveEmptyEntries)
                    .Select(x => converter.ConvertFromString(x.Trim())).ToArray();
    
                var typedValues = Array.CreateInstance(elementType, values.Length);
                values.CopyTo(typedValues, 0);
                bindingContext.Model = typedValues;
    
                bindingContext.Result = ModelBindingResult.Success(bindingContext.Model);
                return Task.CompletedTask;
            }
        }

    官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/mvc/advanced/custom-model-binding?view=aspnetcore-3.1

    知识来源草根专栏 感谢杨旭大佬

  • 相关阅读:
    php-Zip打包文件
    PHP命令行类库 climate
    vim 添加块注释
    冒泡排序|插入排序
    PHP-SeasLog安装和使用
    链表
    多线程上下文切换
    竞态与线程安全
    线程的生命周期
    线程创建的两种方法
  • 原文地址:https://www.cnblogs.com/cqqinjie/p/13372158.html
Copyright © 2011-2022 走看看