Если действие инициируется пользователем, вы должны либо поместить код в контроллер, либо написать собственный класс синтаксического анализатора, который находится в пространстве имен службы или где-то еще. Конечно, лучше разделить код на отдельные классы, чем помещать все в свой контроллер. Особенно, если задача потенциально может быть вызвана не через веб-запрос, а через другое действие.