.NET Controller 层代码技巧

优雅的校验参数

在Controller层接收到请求后,可以通过ASP.NET Core提供的[FromBody]和[FromQuery]特性获取请求参数,并通过数据注解(Data Annotations)对参数进行校验,例如:.

[HttpPost("user")]
public IActionResult CreateUser([FromBody] CreateUserRequest request) {
    if (!ModelState.IsValid) {
        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响应和错误信息。