По крайней мере, происходит три вещи:
1) Создание URL
2) Обработка ошибок
3) И хотя не явно, фактический вызов.
Создание URL-адреса должно выполняться специальным вспомогательным классом. Скорее всего, лучше всего провести проверку на контроллере, фактический код проверки будет находиться в другом месте. Обработка ошибок должна быть на контроллере, поскольку она должна была бы делать что-то особенное, необходимое для конкретного места, где находится пользователь. Наконец, сам вызов, конечно же, должен осуществляться на контроллере.