• .NET Core的Controller层该怎么写才比较优雅?
  • 发布于 2个月前
  • 251 热度
    0 评论
  • 卧龙生
  • 1 粉丝 42 篇博客
  •   

前言:

Controller层代码是应用程序中的核心部分之一,其主要作用是处理业务逻辑并协调Model层和View层之间的交互。好的Controller层代码可以提高应用程序的可靠性和可维护性,同时也能帮助开发人员提高开发效率。本文将介绍一些Controller层代码的技巧,帮助读者编写高质量的Controller层代码。

优雅的校验参数

在Controller层接收到请求后,可以通过ASP.NET Core提供的[FromBody]和[FromQuery]特性获取请求参数,并通过数据注解(Data Annotations)对参数进行校验,例如:
[HttpPost("user")]
public IActionResult CreateUser([FromBody] CreateUserRequest request) {
    if (!ModelState.IsValid) {
        // 堆代码 duidaima.com
        return BadRequest(ModelState);
    }
    // ...
}
在CreateUserRequest类中可以使用数据注解来校验参数,例如:
public class CreateUserRequest {
    [Required(ErrorMessage = "用户名不能为空")]
    public string Username { get; set; }
    [Required(ErrorMessage = "密码不能为空")]
    public string Password { get; set; }
}
如果参数校验不通过,ModelState.IsValid属性将会为false。可以返回带有错误信息的HTTP 400响应。

统一的响应处理
在Controller层返回响应数据时,可以使用ASP.NET Core提供的ActionResult类来进行统一的处理,例如:
[HttpGet("user/{id}")]
public async Task<IActionResult> GetUser(int id) {
    User user = await userService.GetUserAsync(id);
    if (user == null) {
        return NotFound();
    }
    return Ok(user);
}
如果返回的数据为null,可以使用ResponseEntity.notFound()方法返回HTTP 404响应。如果返回的数据不为null,可以使用ResponseEntity.ok()方法返回HTTP 200响应。

异常处理
在处理业务逻辑时,如果遇到了异常,可以使用Java中的异常机制来处理。在Controller层可以捕获异常并返回错误响应,例如:
@PostMapping("/user")
public ResponseEntity<ErrorResponse> createUser(@Valid @RequestBody User user) {
    try {
        userService.createUser(user);
        return ResponseEntity.ok().build();
    } catch (UsernameExistsException ex) {
        String errorMessage = "用户名已存在";
        ErrorResponse errorResponse = new ErrorResponse(HttpStatus.BAD_REQUEST.value(), errorMessage);
        return ResponseEntity.badRequest().body(errorResponse);
    }
}

在业务逻辑中抛出的UsernameExistsException异常会被Controller捕获,然后返回HTTP 400响应和错误信息。
用户评论