Web Api介绍
microsoft asp.net core Web Wpi 简介
asp.net core 可以使用 MVC 或者是 webApi :
MVC 是直接返回渲染完成的视图;
webApi 是查询返回对应的数据,如JSON数据等;
web api 是基于 asp.net core的api接口;
符合restful API;
Web Api 里面的概念
microsoft asp.net core Web Api教程
入门教程推荐官方教程!!
路由属性
[Route("[controller]/[action]")]
[HttpGet/Post/...(" ")] //使用/或~/可以忽视控制器上的route
其他的特殊属性:
[BindRequired] //对输入正文无效
[BindNever] //对输入正文无效
模型绑定
模型绑定在web Api 和MVC中都可以使用的特性
模型绑定的目标:
控制器操作方法的参数
控制器的公共属性(若由特性指定)
目标特性:
[BindProperty]
应用于控制器类的公共属性;
[BindProperties]
应用于控制器类;
[Bind(prefix = "")]
更改前缀
[Bind("propertyName1,propertyName2")] 指定需要绑定属性
模型绑定的数据来源
--------
表单域
请求正文(对于具有 [ApiController] 属性的控制器。)
路由数据
查询字符串参数
上传的文件
--------
如果没有特别指定数据来源,按照上面列表中指示的顺序扫描源。
路由数据和查询字符串值仅用于简单类型。
上传的文件仅绑定到实现 IFormFile 或 IEnumerable<IFormFile> 的目标类型。
指定数据来源特性
--------
[FromQuery] - 从查询字符串中获取值。
[FromRoute] - 从路由数据中获取值。
[FromForm] - 从发布的表单域中获取值。
[FromBody] - 从请求正文中获取值。
[FromHeader] - 从 HTTP 标头中获取值。
--------
这些数据注释可以使用在控制器方法参数里面或者是模型类的属性;
[FromXXX name = " Accept-Name "]当传入的参数名称与定义的参数名不同的时候,在name中指定参数名;
[FromBody]
读取正文只能使用一次;
ASP.NET Core 运行时将读取正文的责任委托给输入格式化程序;
应用于复杂类型参数时,应用于其属性的任何绑定源属性都将被忽略。
输入格式化程序 : 请求正文中的数据可以是 JSON、XML 或其他某种格式。 要分析此数据,模型绑定会使用配置为处理特定内容类型的输入格式化程序。 默认情况下,ASP.NET Core 包括用于处理 JSON 数据的基于 JSON 的输入格式化程序。ASP.NET Core 基于 Consumes 属性来选择输入格式化程序。 如果没有属性,它将使用 Content-Type 标头。
尝试 --- 自定义格式化程序 --
TryUpdateModelAsync 手动进行模型绑定
模型验证
模型状态表示两个子系统的错误:模型绑定和模型验证。
源自模型绑定的错误通常是数据转换错误。
模型验证在模型绑定后发生,并报告数据不符合业务规则的错误。
内置验证特性:
[Required] 必须的,为default(type)的情况下会报错
[StringLength(Number)] 指定数据的长度
[Range(0, 9999)] 指定数据的范围
[RegularExpression]:验证属性值是否与指定的正则表达式匹配
重新验证使用TryValidateModel
--- 尝试自定义特性 ---
特殊特性
ApiController具有下面的特性:
1.路由控制 : 只能使用 Route特性等定义的属性路由,在startup中定义的传统路不起作用。
2.自动404响应 : 当模型验证错误时(ModelState.IsValid == false)自动触发 HTTP 400 响应,可以禁止该功能。
3.参数数据源自动推断 : 复杂类型参数自动绑定[FromBody]
IFormFile 和 IFormFileCollection 类型自动绑定[FromForm]
简单类型中参数名与路由参数名相同的情况下自动绑定[FromRoute]
其他绑定[FromQuery]
还有两个暂时看不懂的特性。