Вы можете установить ActionFilter и выполнить очистку сеанса / и т.д. Таким образом, ваш код всегда будет выполняться перед Index2 - и перед любым действием, для которого вы установите этот атрибут.
public class AbandonSessionAttribute: ActionFilterAttribute
{
public void OnActionExecuting(ActionFilterContext context)
{
if (Session.User.IsAuthenticated || Session.Count > 0) // <<-- this is the important line
{
Session.Clear();
FormsAuthentication.SignOut(); // and so on
context.Result = new RedirectResult("/Index2");
}
}
}
// now, if this is called with non-empty session, it will be cleared and user will be redirected again here
[AbandonSession]
public ActionResult Index2()
{
}
Обратите внимание на "это важная строка". Там вам нужно определить, разрешено ли пользователю входить в Index2. Я делаю это, проверяя, что Сессия не пуста. Тем не менее, после перенаправления MVC может добавить свои собственные переменные Session, так что Session никогда не будет пустым, и фильтр будет перенаправлять снова и снова ... Вам нужно будет выяснить, что нормально для представления в Session. Из вашего вопроса неясно (для меня), если ЛЮБОЙ переход к Index2 должен очистить сеанс - т.е. во время просмотра сайта. Если это так, приведенный выше код в порядке, если нет - вам решать, как это обнаружить (например, поместить что-либо в сеанс на некоторых страницах и удалить оттуда на других).
Опять же, я не понимаю, почему Session не будет работать для вас (и, кстати, TempData также работает через Session). Если фильтр действий, который вы обнаруживаете, этот запрос не является «чистым» - есть вход в систему, сеансовые переменные и т. Д. - вы очищаете это и перенаправляете еще раз к тому же действию - это вызывает создание нового сеанса и так на. На этот раз фильтр ничего не находит - поскольку сессия только что была очищена - и поэтому разрешено выполнение действия.