使用ASP.NET Core 3.x 构建 RESTful API P6 状态和路由
在 .Net Core
Web API 项目中,Controller 层是对外层,所以在 Controller 层之下的其它层(如:业务逻辑层,数据库访问层)是如何运作的,与 Controller层无关,所以针对业务结果,在 Controller 层对外表述的时候,我们需要根据也业务结果给出,具体的 HTTP 状态码.
分析一个 Action 方法,此 Action 存在于 CompaniesController.cs
文件中.
/// <summary>
/// 获取指定公司
/// </summary>
/// <param name="companyId">公司id</param>
/// <returns></returns>
[HttpGet("{companyId}")] // URI Get api/Companies/{companyId}
//[Route("{companyId}")] //使用这种方式也能表示路由,但是不常用
public async Task<IActionResult> GetCompany(Guid companyId)
{
//var exist = await _companyRepository.CompanyExistsAsync(companyId);
//if (exist == false)
//{
// return NotFound();
//}
//上面这种判断其实存在某种缺陷,那就是当前,我拿到了是存在的结果,但是在我拿到存在结果的同时,
//另一个HTTP请求过来删除了我想要的公司资源,那么就会对下述的获取公司的业务逻辑产生影响,即会
//出现并发问题,所以我们应该换成下面的这种形式更为保险一点.
var company = await this._companyRepository.GetCompanyAsync(companyId);
if (company == null)
{
return NotFound(); //404 NotFound
}
// 此处为什么我们要用Ok方法来返回结果,而不是用 new JsonResult(返回结果); 的方式来显式明确的
// 返回Json数据呢,因为根据Http请求的要求,不一定要求返回的是Json数据,如果要求返回的是 XML呢?
// 所以我们应该使用.Net Core 封装号的一些返回数据的方法,因为这些方法,可以根据请求,返回给消费者想要的
// 数据格式的结果.
return Ok(company);
}
.Net Core 修改默认启动URI
我们修改项目下的launchSettings.json
文件,添加"launchUrl": "api/companies"
配置项,即表示启动时,默认URI是 网站地址/api/companies
{
"profiles": {
"Routine.Api": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "api/companies",
"applicationUrl": "http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
使用Postman进行调试
- 获取所有公司
- 获取指定公司信息
- 以上文档参考自
P6 状态和路由