ASP.NET Core Web API 控制器与方法返回输出

DATA ACCESS LAYER

在一些不同的示例教程中,我们可能看到 DAL 的实现在主项目中,并且每个控制器中都有实例。我们不建议这么做。

当我们编写 DAL 时,我们应该将其作为一个独立的服务来创建。在 .NET Core 项目中,这一点很重要,因为当我们将 DAL 作为一个独立的服务时,我们就可以将其直接注入到 IOC(控制反转)容器中。IOC 是 .NET Core 内置功能。通过这种方式,我们可以在任何控制器中通过构造函数注入的方式来使用。

 

public class OwnerController: Controller
{
   private IRepository _repository;
   public OwnerController(IRepository repository)
   {
       _repository = repository;
   }
}

  

CONTROLLERS

控制器应该始终尽量保持整洁。我们不应该将任何业务逻辑放置于内。

因此,我们的控制器应该通过构造函数注入的方式接收服务实例,并组织 HTTP 的操作方法(GET,POST,PUT,DELETE,PATCH...):

 

public class OwnerController : Controller
{
   private readonly ILoggerManager _logger;
   private readonly IRepository _repository;
   public OwnerController(ILoggerManager logger, IRepository repository)
   {
       _logger = logger;
       _repository = repository;
   }

   [HttpGet]
   public IActionResult GetAllOwners()
   {
   }
   [HttpGet("{id}", Name = "OwnerById")]
   public IActionResult GetOwnerById(Guid id)
   {
   }
   [HttpGet("{id}/account")]
   public IActionResult GetOwnerWithDetails(Guid id)
   {
   }
   [HttpPost]
   public IActionResult CreateOwner([FromBody]Owner owner)
   {
   }
   [HttpPut("{id}")]
   public IActionResult UpdateOwner(Guid id, [FromBody]Owner owner)
   {
   }
   [HttpDelete("{id}")]
   public IActionResult DeleteOwner(Guid id)
   {
   }
}

 

  

我们的 Action 应该尽量保持简洁,它们的职责应该包括处理 HTTP 请求,验证模型,捕捉异常和返回响应。

[HttpPost]
public IActionResult CreateOwner([FromBody]Owner owner)
{
   try
   {
       if (owner.IsObjectNull())
       {
           return BadRequest("Owner object is null");
       }
       if (!ModelState.IsValid)
       {
           return BadRequest("Invalid model object");
       }
       _repository.Owner.CreateOwner(owner);
       return CreatedAtRoute("OwnerById", new { id = owner.Id }, owner);
   }
   catch (Exception ex)
   {
       _logger.LogError($"Something went wrong inside the CreateOwner action: { ex} ");
       return StatusCode(500, "Internal server error");
   }
}

 

  

在大多数情况下,我们的 action 应该将 IActonResult 作为返回类型(有时我们希望返回一个特定类型或者是 JsonResult ...)。通过使用这种方式,我们可以很好地使用 .NET Core 中内置方法的返回值和状态码。

使用最多的方法是:

    • OK => returns the 200 status code

    • NotFound => returns the 404 status code

    • BadRequest => returns the 400 status code

    • NoContent => returns the 204 status code

    • Created, CreatedAtRoute, CreatedAtAction => returns the 201 status code

    • Unauthorized => returns the 401 status code

    • Forbid => returns the 403 status code

    • StatusCode => returns the status code we provide as input

posted @ 2020-01-21 17:27  介尘(Heroy)  阅读(1056)  评论(0编辑  收藏  举报