Không cần.
Khi controller có [ApiController], ASP.NET Core tự gắn ModelStateInvalidFilter: nếu model binding hoặc data annotation thất bại, framework trả 400 ngay và action không chạy.
csharp
public record CreateOrderDto(
[Required] string CustomerCode,
[Range(1, 100)] int Quantity);
[ApiController]
[Route("api/orders")]
public class OrdersController : ControllerBase
{
[HttpPost]
public async Task<IActionResult> Create(CreateOrderDto dto)
{
// ModelState is guaranteed valid here
}
}Body trả về là ValidationProblemDetails (RFC 7807) với dictionary errors map tên field sang danh sách lỗi — client parse được theo chuẩn.
Muốn đổi định dạng lỗi thì cấu hình InvalidModelStateResponseFactory; muốn tắt hẳn thì SuppressModelStateInvalidFilter = true rồi tự kiểm ModelState.
Lưu ý phạm vi: filter này chỉ bắt lỗi cú pháp/format (thiếu field, sai kiểu, ngoài range). Luật nghiệp vụ như "mã khách hàng phải tồn tại" vẫn phải kiểm trong service và trả 400/409 thủ công.