ASP.NET MVC 3: принудительный переход пользователя на определенную страницу, если информация отсутствует, аналогично проверке подлинности форм

#asp.net-mvc-3 #redirect

#asp.net-mvc-3 #перенаправление

Вопрос:

Я работаю над приложением администратора для другого приложения. В приложении есть несколько организаций. Администраторы могут иметь права администратора в одной или нескольких организациях.

Я хотел бы заставить пользователей выбирать «текущую организацию» для работы сразу после входа в систему. Я также хотел бы принудительно возвращать пользователей на эту страницу, если они переходят прямо на внутреннюю страницу без установки этой информации, как это происходит со страницами входа в систему и аутентификацией форм.

Я бы хотел перенаправить обратно на запрошенную страницу после отправки, если пользователь фактически был вынужден вернуться на страницу «выбрать текущую организацию», как это происходит с проверкой подлинности форм.

Я думаю, что это, вероятно, можно сделать довольно просто с помощью фильтров действий, но на данный момент я не знаю, как это сделать. Может кто-нибудь указать мне правильное направление?

Ответ №1:

Я думаю, вам нужен пользовательский базовый класс контроллера.

Попробуйте поместить логику в эти:

 protected virtual void OnActionExecuted(ActionExecutedContext filterContext);
protected virtual void OnActionExecuting(ActionExecutingContext filterContext);
 

Вот еще немного информации…

 // Use these to get current url info
filterContext.HttpContext.Request.RawUrl

// use this to get current route info
filterContext.RouteData

// use this to redirect
filterContext.Result
 

Комментарии:

1. Большое вам спасибо. Можно ли извлечь предполагаемый URL-адрес из параметра контекста фильтра? Нужно ли мне изменять контекст фильтра перед перенаправлением моего пользователя?

2. В MVC3 вы можете сделать это как глобальный атрибут ActionFilterAttribute, поэтому вам не нужно беспокоиться о наследовании контроллера.