在ASP.NET Core WebAPI中处理验证异常的方法如下:
app.UseExceptionHandler(errorApp =>
{
errorApp.Run(async context =>
{
context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
context.Response.ContentType = "application/json";
var error = context.Features.Get<IExceptionHandlerFeature>();
if (error != null)
{
var errorMessage = new
{
Message = "Validation Failed",
Errors = error.Error.Message
};
var json = JsonConvert.SerializeObject(errorMessage);
await context.Response.WriteAsync(json);
}
});
});
上述代码会将验证异常的HTTP状态码设置为400(BadRequest),并返回一个包含错误信息的JSON响应。
IExceptionFilter
接口的类,如下所示:public class ValidationExceptionFilter : IExceptionFilter
{
public void OnException(ExceptionContext context)
{
if (context.Exception is ValidationException)
{
context.Result = new BadRequestObjectResult(new
{
Message = "Validation Failed",
Errors = ((ValidationException)context.Exception).Errors
});
context.ExceptionHandled = true;
}
}
}
然后,在Startup.cs文件的ConfigureServices方法中注册该异常过滤器:
services.AddMvc(options =>
{
options.Filters.Add(typeof(ValidationExceptionFilter));
});
这样,当发生验证异常时,会自动调用该异常过滤器进行处理。
[HttpPost]
public IActionResult Create([FromBody] MyModel model)
{
if (!ModelState.IsValid)
{
var errors = ModelState.Values.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage)
.ToList();
return BadRequest(new
{
Message = "Validation Failed",
Errors = errors
});
}
// 处理有效的模型数据
// ...
return Ok();
}
上述代码中,如果模型验证失败,会返回一个包含错误信息的BadRequest响应。
总结:处理ASP.NET Core WebAPI中的验证异常可以通过异常处理中间件、自定义验证异常处理器、使用ModelState.IsValid属性等方法来实现。这些方法可以根据具体需求选择使用,以提供更好的异常处理和错误信息返回。
领取专属 10元无门槛券
手把手带您无忧上云