• mvc action 参数绑定——值提供器【学习笔记】


    每次http请求的各种数据(表单数据、url的数据、路由数据等等)都保存在不同的IValueProvider接口的实现类中。

    而IValueProvider接口的实现类是通过ValueProviderFactory创建的。

    在mvc中原生的ValueProviderFactory有六种:

    • ChildActionValueProviderFactory:根据给定的Controller上下文创建一个ChildActionValueProvider对象。
    • FormValueProviderFactory:根据给定的Controller上下文创建一个FormValueProvider对象。
    • JsonValueProviderFactory:将以JSON形式表示的请求数据转换成一个Dictionary<string, object>对象,并最终创建一个DictionaryValueProvider<object>对象。
    • RouteDataValueProviderFactory:根据给定的Controller上下文创建一个RouteDataValueProvider对象。
    • QueryStringValueProviderFactory:根据给定的Controller上下文创建一个QueryStringValueProvider对象。
    • HttpFileCollectionValueProviderFactory:根据给定的Controller上下文创建一个HttpFileCollectionValueProvider对象。

    ValueProviderFactory需要注册到ValueProviderFactories的静态属性Factories中,才能被使用。

       1: public static class ValueProviderFactories
       2: {
       3:     public static ValueProviderFactoryCollection Factories { get; }
       4: }
       6: public class ValueProviderFactoryCollection : Collection<ValueProviderFactory>
       7: { 
       8:     public ValueProviderFactoryCollection();
       9:     public ValueProviderFactoryCollection(IList<ValueProviderFactory> list);    
      10:     public IValueProvider GetValueProvider(ControllerContext controllerContext);
      11: }


    系统首先通过ValueProviderFactories类的静态属性获得ValueProviderFactoryCollection ,然后通过GetValueProvider方法获得一个ValueProviderCollection,ValueProviderCollection就是值提供器集合。

       1: public class ValueProviderCollection : Collection<IValueProvider>, IUnvalidatedValueProvider, IEnumerableValueProvider, IValueProvider
       2: {
       3:     public ValueProviderCollection();
       4:     public ValueProviderCollection(IList<IValueProvider> list);
       6:     public virtual bool ContainsPrefix(string prefix);
       7:     public virtual IDictionary<string, string> GetKeysFromPrefix(string prefix);  
       8:     public virtual ValueProviderResult GetValue(string key);
       9:     public virtual ValueProviderResult GetValue(string key, bool skipValidation);   
      10: }
  • 相关阅读:
    rails时间问题
    stringify_keys 和symbolize_keys
    thritf
    Nginx负载均衡反向代理
    CentOS 7 yum 安装 Nginx
    CentOS 7安装与配置Tomcat8
    CentOS 7安装与配置JDK8
    系统数据字典模块设计
    mysql视图
    阿里云maven中央仓库
  • 原文地址:https://www.cnblogs.com/lxiang/p/3919025.html
Copyright © 2020-2023  润新知