为了和RESTful API进行交互, API的消费者需要使用到三个概念.
在合理的API命名上,我们应该使用名词,而不是动词,动词应该通过Http方法来表达.
例子1:
例子2:
例子3:
RESTful 风格的API 比较适合于CRUD这类业务的API.
好了下面是写代码的时间,我们打开p1中所创建的项目,并在其中创建一个Controller
类.
补充知识点:
HTTP 动词 不是在 Controller 里面的方法名上体现的.
约定: 当Controller中方法名的前缀如果是个动词如 GetCompanies 那么如果没有为此方法标注动词,那么默认就是以 [HttpGet] 的方式来请求此 Action.
IActionResult 接口: IActionResult 接口相当于订阅了一些合约,这些合约代表了 Action 方法返回的结果.
在.Net Core
中Controller
类也会继承自ControllerBase
类,他们主要的区别在与,ControllerBase
类仅实现了,Controller(控制器)相关的功能,而Controller
类,在拥有Controller(控制器)相关功能的基础上,还添加了对于View(视图)的支持.
因此在编写 WebAPi 时,我们创建的控制器,继承自 ControllerBase
类即可.
在编写Mvc时,我们创建的控制器,需要继承自Controller
类,因为其包含了对于view(视图)操作的实现.
Startup.cs
类的Configure
方法中的端点
中间件中统一配置路由模板了,需要我们在每个 Controller 以及每个 Action 上面单独的配置路由模板.using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Routine.Api.Services;
namespace Routine.Api.Controllers
{
[Route("api/Companies")]
[ApiController]
public class CompaniesController:ControllerBase
{
private readonly ICompanyRepository _companyRepository;
public CompaniesController(ICompanyRepository companyRepository)
{
_companyRepository = companyRepository ?? throw new ArgumentNullException(nameof(companyRepository));
}
/// <summary>
/// 获取所有公司信息
/// </summary>
[HttpGet]
public async Task<IActionResult> GetCompanies()
{
var companies = await this._companyRepository.GetCompaniesAsync();
if (companies == null)
{
return NotFound();
}
return Ok(companies);
}
}
}
代码编写好了,我们运行一下,发现报错了.
修正代码:
/*
* 端点中间件
*/
app.UseEndpoints(endpoints =>
{
//endpoints.MapGet("/", async context =>
//{
// await context.Response.WriteAsync("Hello World!");
//});
// 在使用了 [ApiController] 特性之后,我们就不需要再使用全局配置的路由表了,我们不应该再使用上述方法,
// 而是应该使用下列方法来描述端点 (MapControllers 表示统一的路由模板)
endpoints.MapControllers();
});
- 以上博文参考自
p3 对外合约
使用ASP.NET Core 3.x 构建 RESTful API P3 对外合约
原文:https://www.cnblogs.com/HelloZyjS/p/12577997.html