ASP.NET Core 2.1 introduced the APIController attribute which automatically enables some API features like model validation, HTTP 400 responses, etc…
When the controller is decorated with APIController attribute, the framework would automatically register a ModelStateInvalidFilter which runs on the OnActionExecuting event.
This is nice but I had a situation where I wanted to use my own validation and didn’t want to integrate with the model binding. However I still wanted to take advantage of all the other features that the APIController adds.
This is possible through the ApiBehaviorOptions: