zoukankan      html  css  js  c++  java
  • asp.net core控制器方法返回输出

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

    DATA ACCESS LAYER

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    public class OwnerController: Controller
    {
       private IRepository _repository;
       public OwnerController(IRepository repository)
       {
           _repository = repository;
       }
    }

      

    CONTROLLERS

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    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 请求,验证模型,捕捉异常和返回响应。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    [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

  • 相关阅读:
    POJ 1251Jungle Roads
    ES6---Class基本语法
    浅谈JS的toString
    为什么用Object.prototype.toString.call(obj)检测对象类型?
    JS输出内容为[object Object]与toString
    Sublime text JsFormat插件的安装
    Sublime Text 无法使用Package Control或插件安装失败的解决方法
    Emmet-前端开发神器
    sublime text 3中文版配置--插件ChineseLocalizations
    vs code相关用法
  • 原文地址:https://www.cnblogs.com/fangxinliu/p/14014051.html
Copyright © 2011-2022 走看看