https://en.wikipedia.org/wiki/Separation_of_concerns
https://learn.microsoft.com/en-us/dotnet/architecture/modern-web-apps-azure/architectural-principles
https://www.c-sharpcorner.com/UploadFile/56fb14/understanding-separation-of-concern-and-Asp-Net-mvc/
https://ardalis.com/new-is-glue/
Understand what it means about using the Models and keeping the controller thin which also applies to the WebAPI controller.
https://deviq.com/terms/kinds-of-models
https://www.dotnettricks.com/learn/mvc/understanding-viewmodel-in-aspnet-mvc
https://www.codeproject.com/Articles/1050468/Data-Transfer-Object-Design-Pattern-in-Csharp
You'll notice there is not a try/catch in any code on the MVC client side or WebAPI service side code including any project being referenced, which is be caught the global exception handling in the MVC and WebAPI projects.
https://stackify.com/csharp-catch-all-exceptions/
In Models folder classes suffix, VM = viewmodel and DM = domain model, and info in the links have been implemented in the GitHub solution example.
https://github.com/darnold924/PublishingCompany
HTH