浅谈C#9.0新特性之参数非空检查简化

2020-06-16 12:00:28王振洲

使用示例:

public async Task UpdateAsync(long id, BookUpdateDto dto)
{
  ApiGuard.EnsureNotNull(dto, nameof(dto));
  ApiGuard.EnsureNotEmpty(dto.TagValues, nameof(dto.TagValues));

  var book = await DbSet
    .Include(x => x.BookTags)
    .FirstOrDefaultAsync(x => x.Id == id);
  ApiGuard.EnsureExist(book);

  Mapper.Map(dto, book);

  ...
}

ApiGuard 的好处是,当 API 接口接到不合要求的参数时,可以自定义响应返回内容。比如,增加一个 Filter 或中间件用来全局捕获业务代码异常,根据不同的异常返回给前端不同的状态码和消息提示:

private Task HandleExceptionAsync(HttpContext context, Exception exception)
{
  ApiResult result;
  if (exception is BadRequestException)
  {
    result = ApiResult.Error(exception.Message, 400);
  }
  else if (exception is NotFoundException)
  {
    message = string.IsNullOrEmpty(message) ? "Not Found" : message;
    result = ApiResult.Error(message, 404);
  }
  else if (exception is UnauthorizedAccessException)
  {
    message = string.IsNullOrEmpty(message) ? "Unauthorized" : message;
    result = ApiResult.Error(message, 401);
  }
  ...
}

只是一个参数非空检查,在实际开发中却有不少的学问,所以学好了理论还要多实践才能更透彻的理解它。

到此这篇关于浅谈C#9.0新特性之参数非空检查简化的文章就介绍到这了,更多相关C#9.0 参数非空检查 内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!

作者:王亮
出处:http://cnblogs.com/willick
联系:liam.wang@live.com