使用ASP.NET Core 3.x 构建 RESTful API P6 状态和路由

使用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进行调试

  1. 获取所有公司

获取所有公司信息
获取所有公司信息

  1. 获取指定公司信息
    获取指定公司信息
posted @ 2020-03-28 23:05  HelloZyjS  阅读(136)  评论(0编辑  收藏  举报