Web Api 模型绑定 二

[https://docs.microsoft.com/zh-cn/aspnet/core/web-api/?view=aspnetcore-2.2]  

1.ApiController属性使模型验证错误自动触发HTTP400响应。因此,不需要进行ModelState.IsValid验证。若要禁用400行为,需要将SuppressModelStateInvalidFilter属性设置为true。

>>> services.AddMvc()
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
    .ConfigureApiBehaviorOptions(options=>{
      options.SuppressModelStateInvalidFilter=true;
    });

2.如果没有ApiController属性或诸如[FromQuery]的绑定源属性,Asp.Net Core运行时会尝试使用复杂对象模型绑定器。复杂对象模型绑定器按已定义顺序从值提供程序拉取数据。
ApiController属性将推理规则应用于操作参数的默认数据源。借助这些规则,无需通过将属性应用于操作参数来手动识别绑定源。
  [FromBody]针对复杂类型参数进行推断。但其不适用于具有特殊含义的任何复杂的内置类型,如IFormCollection和CancellationToken。
  [FromForm]针对IFormFile和IFormFileCollection类型的操作参数进行推断。
  [FromRoute]针对与路由模板中的参数相匹配的任何操作参数名称进行推断。
  [FromQuery]针对任何其他操作参数进行推断。
若要禁用绑定源推理,需要将SuppressInferBindingSourcesForParameters设置为true。
>>> services.AddMvc()
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
    .ConfigureApiBehaviorOptions(options=>{
      options.SuppressInferBindingSourcesForParameters=true;
    });
[注]在asp.net core2.1中,集合类型参数(如列表和数组)被不正确地推断为FromQuery。若要从请求正文中绑定参数,应对这些参数使用FromBody属性。此行为在asp.net care2.2或更高版本中得到
更正,其中集合类型被推断为从正文中绑定。

posted @ 2019-08-29 09:25  酷学大叔  阅读(494)  评论(0编辑  收藏  举报