如何在ASP.NET Core 7 Web API中禁用自动模型验证?
问题:禁用ASP.NET Core 7 Web API的默认模型验证拦截
我有一个ASP.NET Core 7 Web API项目,其中包含一个动作方法,该方法从请求体接收如下ActionModel模型:
public class ActionModel { [Required] [MaxLength(3)] [RegularExpression("[a-zA-Z]+[a-zA-Z]*")] public string Name { get; set; } public Guid ProfileId { get; set; } }
我的动作方法如下所示:
[HttpPost("extra-data")] public async Task<ActionResult> MyAction([FromBody] ActionModel requestDto) { if (ModelState.IsValid) { _logger.LogError("Try to do some thing"); } _logger.LogError($"{ModelState.ErrorCount}"); return Ok(); }
我希望请求能进入动作方法体内执行,但目前请求在到达动作方法前就被其他中间件验证拦截了。请问如何禁用这个默认的自动验证中间件?
解决方案
ASP.NET Core 7中默认通过ApiBehaviorOptions启用了自动模型验证机制,该机制会在请求进入动作方法前自动检查模型状态,若验证失败直接返回400 Bad Request响应。要禁用这一默认拦截行为,只需在项目的Program.cs中配置ApiBehaviorOptions:
builder.Services.Configure<ApiBehaviorOptions>(options => { // 禁用自动模型验证拦截 options.SuppressModelStateInvalidFilter = true; });
配置完成后,无论模型验证是否通过,请求都会进入动作方法体内。你可以像代码中那样,通过ModelState.IsValid自行判断验证结果,并根据业务需求处理错误或执行后续逻辑。
内容的提问来源于stack exchange,提问作者Navid_pdp11
相关产品推荐
相关产品推荐

