Model binding(绑定)简单来说就是通过遍历ValueProvider(值提供者)获取的数据对Action参数进行赋值.
在学习本篇教程,应对model binding有基础了解。
DefaultPropertyBindingPredicateProvider
DefaultPropertyBindingPredicateProvider:提供一种基于表达式的方法来提供包括的属性。
这个类有三个属性:
Prefix 表示前缀名
PropertyFilter :属性过滤
PropertyIncludeExpressions :属性包括表达式
来看下怎么用实例代码
控制器
User实体
Prefix 前缀名是user,也就是说请求id必需加上user作为前缀
PropertyIncludeExpressions:属性包括:
get
{ yield return m => m.RegisterationMonth; yield return m => m.UserName; }
表示:支队这个属性进行赋值。
我们来看看PropertyFilter作用
_defaultFilter1 表达式一直返回false
全部没有赋值,
PropertyFilter:
PropertyIncludeExpressions等于null propertyFilter 将默认返回true.
FromRoute
FromQuery
FromForm
FromBody
FromHeader
FromServices
这是属性表示绑定的值从何获取
控制器
FromRoute:从路由绑定
FromQuery:参数绑定
[FromForm]:表单绑定
控制器
视图
FromForm:表单绑定
控制器
FromHeader:Header绑定
控制器
IOC
IModelMetadataProvider
Model元数据提供者
public class AdditionalValuesMetadataProvider : IDisplayMetadataProvider { private static Guid _guid = new Guid("7d6d0de2-8d59-49ac-99cc-881423b75a76"); public void GetDisplayMetadata(DisplayMetadataProviderContext context) {
//添加附加值 context.DisplayMetadata.AdditionalValues.Add("key1", _guid); context.DisplayMetadata.AdditionalValues.Add("key2", "value2"); } }
启动类
services.AddMvc() .Configure<MvcOptions>(m => { m.ModelMetadataDetailsProviders.Add(new AdditionalValuesMetadataProvider()); });
控制器
public IReadOnlyDictionary<object, object> GetAdditionalValues([FromServices] IModelMetadataProvider provider) { var metadata = provider.GetMetadataForType(typeof(LargeModelWithValidation)); //输出附加值 return metadata.AdditionalValues; }
IModelBinder
模型绑定
控制器