zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    idea优秀插件(Java开发常用)
    mysql中文乱码问题解决
    SpringMVC生成任意文件,访问链接即下载
    SpringMVC生成Excel下载
    [转]java实现excel的导入导出(poi详解)
    [转]遇到乱码了查看乱码编码
    idea打包java可执行jar包
    Java项目JUnit简单使用
    [转]SpringMVC拦截器简单教程
    Java精确计算小数
  • 原文地址:https://www.cnblogs.com/PengQuanfeng/p/9765978.html
Copyright © 2011-2022 走看看