【ASP.NET Core】基础

介绍

WebAPI用来开发系统间接口的技术,基于HTTP协议,返回默认是json格式。比wcf简单 更通用,更轻量级,更省流量(json格式);
WebAPI尽可能复用MVC路由、ModelBinder、Filter等知识,但只是模仿
webapi默认路由机制是通过http请求类型匹配Action(REST风格),而MVC的默认路由机制是通过url匹配Action。
可以修改webapi默认路由机制,通过url匹配action

Controller & ControllerBase

  • MVC的Controller继承于 Controller;Web API的Controller继承于 ControllerBase
  • Controller继承自ControllerBase,Controller添加了对视图的支持,因此它更适合用于处理 MVC Web 页面,而不是 Web API。但是如果你的Controller需要同时支持MVC Web页面和Web API,那么这时候就应该继承于Controller这个类。
  • ControllerBase 类提供了很多用于处理 HTTP 请求的属性和方法

ApiControllerAttribute

[ApiController]并不是强制的,使得Web API的开发体验更好,在Controller上面添加了[ApiController]属性之后,就会启用以下行为:

  • 要求使用属性路由(Attribute Routing)。不能通过Startup的Configure方法统一配置路由模板
  • 自动HTTP 400响应。Action方法传入的model含有验证错误的时候,自动触发HTTP 400响应
  • 推断参数的绑定源。它将会推断出Action方法的参数到底来自哪个绑定源,例如[FromBody]、[FromForm]等等
  • Multipart/form-data 请求推断。使用 [FromForm] 属性批注操作参数时,[ApiController] 属性将应用推断规则,它会推断 multipart/form-data 为请求的内容类型
  • 错误状态代码的问题详细信息。MVC 会将错误结果(状态代码为 400 或更高的结果)转换为状态代码为 ProblemDetails 的结果

ProblemDetails

ProblemDetails目的是让 HTTP 响应可以携带错误的详细信息,而不是只返回一个错误的状态码。
如果Controller使用了 [ApiController] 这个属性,那么 ProblemDetails 就是客户端错误码的标准响应。
例如,当返回类型为 IActionResult 的方法返回客户端错误状态码的时候(4xx),同时还会返回一个body,这个 body 就是 ProblemDetails。 这个结果里还会包含着一个相关的ID,使用这个ID,就可以把错误和相应的请求日志关联起来
看一个404的例子:

posted @ 2019-12-15 06:24  .Neterr  阅读(405)  评论(0编辑  收藏  举报