• Asp.net model 绑定原理


    • 背景

       最近在WebAPI项目中需要实现操作留痕的功能, 差不多就是操作日志。最开始设定的目标是:需要能够查询到哪个人对哪个功能模块(可以用control表达)的哪个方法进行了哪些修改(也即是需要对操作后的新数据进行记录), 其它部分都好办, 可以通过WebAPI的Filter进行OAP进行切面调用, 但在对新数据进行记录的时候遇到些麻烦, 因为从最后留痕界面段操作的时候使用的是字段名进行查询, 而传入进来的数据是用面向对象的方式组织的里面存在继承、包含等关系还存在各种类型, 那么怎么才能把这种对象结构映射成键值对的方式?在这里那么就需要通过反射对对象结构进行解析,但对于不同的类型又会有不同的解析方式,比如说:如果碰到的是int/double 等基元类型可以直接获取到字段名、字段值来形成键值对, 而对于类类型、结构体需要通过反射出里面的字段名、字段值, 而如果在类类型中包含了List/Array 等集合的话还得对列表里面所包含的类型再次进行解析, 如果应对的是枚举呢又改怎么办呢?  这种解析的范式就类似于对象的序列化、反序列化,在WebApi中同样存在类似的情景就是模型的绑定和返回, 如果能弄明白模型的绑定和返回的话以上的问题就好解决了, 下面就专注考虑下WebAPI中模型的绑定是怎么做的?

    • Web.API 模型绑定

        大家都知道在WebAPI中当前段调用一个Http Request的时候里面会带入参数, 然后通过Http管道和路由机制最后可以找到相对应的Control 和 Action, 那么接下来所需要做的主要有两件事:

        1、参数验证

        2、把数据绑定到Action所对应的参数列表上(模型绑定)

        接下来将主要看看模型绑定实现思路是怎么样?

        下面是我对模型绑定研究过程:

      • 从GitHub上下载WebAPI源代码,链接: https://github.com/aspnet/Mvc 
      • 找到模型绑定相关模块,如下图: 

    在WebAPI中主要是通过 ModelBinding 这块代码进行实现

      • 类图

          利用Enterprise Architect(EA)对源代码逆向分析生成相应的类图结构,如下图:

          

           图中只是部分类图, 为了能理清思路, 从部分入手, 假设一种情景从Http中通过Body传递对象到Action中,对于对象怎么解析呢?

          

      • 逻辑流程
      • 扩展点
    • 解决方案
    • 设计层面
      • 类图
      • 时序图
    • 代码Demo
  • 相关阅读:
    paip.代码生成器数据源格式最佳实践
    paip.hibernate list 返回位null的解决
    paip.hibernate save 失败的解决
    paip.提升效率---提升绑定层次--form绑定取代field绑定
    paip.python NameError name 'xxx' is not defined
    paip.sqlite 管理最好的工具 SQLite Expert 最佳实践总结
    paip.输入法英文词库的处理 python 代码 o4
    paip.判断文件是否存在uapi python php java c#
    paip.截取字符串byLastDot方法总结uapi python java php c# 总结
    paip.python连接mysql最佳实践o4
  • 原文地址:https://www.cnblogs.com/PengQuanfeng/p/9765978.html
Copyright © 2020-2023  润新知