Если вы действительно выполняете «сеансы ненависти», как вы говорите, потенциально существует другой вариант, который заключается в передаче строки запроса для всех «обратных» операций, определяющих, куда идти дальше.
Так работает большинство страниц входа в систему - если вы не авторизованы для просмотра страницы, она будет перенаправлена на страницу входа с набором параметров строки запроса redirectUrl. Затем при успешном входе вы будете перенаправлены на страницу, с которой изначально пришли.
И просто, чтобы немного упростить ваш код, вы можете перегрузить метод RedirectToAction () на вашем контроллере так, чтобы он перенаправлял на заданное действие, ЕСЛИ есть специальная строка запроса, в этом случае он перенаправляет туда.
edit: Я знаю, что вы упомянули это как возможность, но я все равно опубликовал это, потому что:
1) в этом нет ничего плохого (особенно если вы «ненавидите сеансы»), и 2) вы упомянули о проверке действия на наличие ключа, которую, я думаю, можно было бы лучше написать, как я описал (используя перегрузку - DRY )