在.NET Core中,统一异常处理、结果返回和参数校验是提高应用程序健壮性和一致性的关键部分。
统一异常处理
在.NET Core中,你可以使用中间件(Middleware)来统一处理异常。这通常涉及到创建一个自定义的异常处理中间件,它可以捕获异常并处理在请求处理过程中抛出的任何异常。
- 创建自定义异常处理中间件:实现一个中间件,它捕获异常并转换为适当的HTTP响应
- 在Program.cs中配置中间件:将你的异常处理中间件添加到管道中,并确保它在其他中间件之后运行。
- 记录异常:在异常处理中间件中,你可以使用日志记录框架
异常处理中间件:
C#
public class ExceptionHandlerMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger<ExceptionHandlerMiddleware> _logger;
public ExceptionHandlerMiddleware(RequestDelegate next, ILogger<ExceptionHandlerMiddleware> logger)
{
_next = next;
_logger = logger;
}
public async Task InvokeAsync(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception ex)
{
_logger.LogError(ex, "An error occurred while processing the request.");
context.Response.StatusCode = StatusCodes.Status500InternalServerError;
await context.Response.WriteAsync("Internal Server Error");
}
}
}
在Program中配置中间件:
C#
app.UseMiddleware<ExceptionHandlerMiddleware>();
结果返回
对于API的响应,通常建议使用一种统一的结果返回格式。
这有助于客户端解析和理解响应。
- 创建响应模型:定义一个包含success、message、data、errors等属性的响应模型。
- 在控制器中使用响应模型:当控制器处理请求并准备返回响应时,使用响应模型来封装数据
- 处理错误:如果发生错误,将错误信息添加到响应模型的error属性中,并将success设置为false
C#
{
"success": true,
"message": "Operation successful",
"data": { /* 响应数据 */ },
"errors": null
}
参数校验
参数校验是确保API输入数据的有效性和完整性的重要步骤。
在.NET Core中,你可以使用数据注解(Data Annotations)和模型验证(Model Validation)来实现参数校验。
- 在模型上使用数据注解:在你的模型类上使用数据注解来定义验证规则,如[Required]、[Range]等
- 在控制器中进行模型验证:在控制器方法中,使用ModelState.isValid来检查模型是否有效。如果无效,可以返回一个包含验证错误的响应。
- 自定义验证逻辑:如果需要更复杂的验证逻辑,你可以实现自定义验证属性或接口。
C#
if (!ModelState.IsValid)
{
return BadRequest(new { errors = ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage) });
}