Я думаю, что ошибки должны обрабатываться на уровне сервиса. Так как сервисный уровень является логическим уровнем, оттуда должны быть сгенерированы исключения.
Затем вы можете перехватывать выданные исключения внутри Mvc Controller и отображать их так, как хотите.
Более того, обработка логических исключений будет такой же, как в Mvc Controller, так и в других программах, вызывающих уровень обслуживания напрямую.