Demo
下面我们就来实践一下。打开之前的项目,并建立CompaniesController:
这里有6个地方比较关键,我们挨个看一下:
RESTful API 或者其它Web API的Controller都应该继承于 ControllerBase 这个类(点此查看详细的官方文档),而不是Controller这个类。
ControllerBase 类提供了很多用于处理 HTTP 请求的属性和方法。 例如,ControllerBase.CreatedAtAction 返回 201 状态代码。关于ControllerBase的属性和方法的详细列表,请查看官方参考文档。
[ApiController]。这个属性是应用于Controller的,它其实并不是强制的,但是它提供了一些帮助,使得Web API的开发体验更好。详细教程请点击 [ApiController]的官方文档。在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 类型基于 RFC 7807 规范,用于提供 HTTP 响应中计算机可读的错误详细信息。这部分的详细介绍请点击:官方文档。
我们需要通过构造函数注入ICompanyRepository,并把它存放在一个只读的字段里面。
如果注入的ICompanyRepository的实例为null,那么就抛出一个ArgumentNullException。
想要返回数据结果,我们需要在Controller里面添加一个Action方法。我暂时把它的返回类型写为IActionResult(详细介绍请点击官方文档)。IActionResult里面定义了一些合约,它们可以代表Action方法返回的结果。
我暂时只想把结果序列化为JSON格式并返回,这里我new了一个JsonResult(参考文档),它可以做这项工作。
目前我只做了这几项最基本的工作:创建Controller,注入Repository,创建Action方法并返回结果。下面运行一下看看报了什么错:
这是因为GetCompanies这个Action方法并没有使用属性路由(Attribute Routing)。关于路由这部分,下一篇文章再介绍。
点击原文查看博客园的博文,主要是里面有文档的链接.