When building a web adapter for an application, we should keep in mind that we are building an adapter that translates HTTP to method calls for the use cases of our application and translates the results back to HTTP and does not do any domain logic.
The application layer, on the other hand, should not do HTTP, so we should make sure not to leak HTTP details. This makes the web adapter replaceable by another adapter should the need arise.
When slicing web controllers, we should not be afraid to build many small classes that don't share a model. They are easier to grasp, to test, and support parallel work. It's more work initially to set up such fine-grained controllers, but it will pay off during maintenance.