在ASP.NET Core Web API中处理验证错误有多种方法,以下是一种示例解决方法:
public void ConfigureServices(IServiceCollection services)
{
// 添加验证服务
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration["Jwt:Issuer"],
ValidAudience = Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
};
});
// 添加MVC服务
services.AddControllers()
.ConfigureApiBehaviorOptions(options =>
{
// 关闭默认的模型验证错误处理
options.SuppressModelStateInvalidFilter = true;
});
}
[ApiController]
[Route("api/[controller]")]
public class UserController : ControllerBase
{
[HttpPost]
public IActionResult CreateUser([FromBody] UserModel user)
{
if (!ModelState.IsValid)
{
// 获取所有验证错误
var errors = ModelState.Values.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage)
.ToList();
return BadRequest(errors);
}
// 处理创建用户的逻辑
return Ok();
}
}
在上述代码中,我们首先在Startup.cs文件中添加了验证服务并配置了JWT验证参数。然后,我们使用AddControllers().ConfigureApiBehaviorOptions()
方法禁用了默认的模型验证错误处理。最后,在UserController中的CreateUser方法中,我们使用ModelState.IsValid
检查模型是否验证通过,如果不通过,我们获取所有的验证错误并返回BadRequest响应。
这样,当有验证错误发生时,客户端将收到一个包含错误信息的BadRequest响应。