Я довольно плохо знаком с MVC, но не уверен точно, какое Перенаправление... заменяет стандартное перенаправление, используемое в WebForms т.е. стандарте Response.Redirect()
Например, я должен перенаправить к другим страницам в нескольких сценариях:
1) Когда пользователь выходит из системы (Формы signout в Действии), я хочу перенаправить к странице входа в систему.
2) В Контроллере или основном событии Controller, например, Initialize
, Я хочу перенаправить к другой странице (AbsoluteRootUrl + Контроллер + Действие)
Кажется, что несколько перенаправлений называют в некоторых случаях, который заставляет ошибки, что-то делать с фактом, страница уже перенаправляется? Как может отменить текущий запрос и просто перенаправить?
Обновление:
Ответ на этот вопрос (Система. Сеть. Mvc. Контроллер Инициализирует), указывает на это Initialize
не должен использоваться и OnActionExecuting
должен использоваться?
Любые комментарии, почему Initialize
не должен использоваться или почему OnAuthorization
разве более оптимальный вариант не?
Подробнее:
Это сообщение в блоге (http://blog.wekeroad.com/blog/aspnet-mvc-securing-your-controller-actions/) указывает на это OnActionExecuting
полезно для аутентификации (как обозначено в ссылке выше), я предполагаю добавление, что это к тому событию в основном Классе контроллера прекрасно, когда каждая страница работает, Действие в MVC так не должно иметь большого значения, и наличие способности перенаправить должно быть легче. Это действительно имеет смысл, но это также, кажется, имеет смысл мне, что вещи могли быть сделаны в событии перед этим событием и делают, мы подвергаем сомнению то, для чего те события? Будет давать OnActionExecuting
движение..
1) Когда пользователь выходит из системы (выход из системы в действии), я хочу перенаправить на страницу входа.
public ActionResult Logout() {
//log out the user
return RedirectToAction("Login");
}
2) В событии контроллера или базового контроллера, например Initialze, я хочу перенаправить на другую страницу (AbsoluteRootUrl + Controller + Action)
Почему вы хотите перенаправить из инициализации контроллера?
механизм маршрутизации автоматически обрабатывает входящие запросы, если вы имеете в виду, что хотите перенаправить из действия index на контроллере, просто выполните:
public ActionResult Index() {
return RedirectToAction("whateverAction", "whateverController");
}
1) Для перенаправления на страницу входа / со страницы входа не используйте методы Redirect (). Используйте FormsAuthentication.RedirectToLoginPage ()
и FormsAuthentication.RedirectFromLoginPage ()
!
2) Вы должны просто использовать RedirectToAction ("действие", "контроллер") в обычных сценариях ..
Вы хотите перенаправить в сторону метода Initialize? Почему? Я не понимаю, зачем вам когда-либо это делать, и в большинстве случаев вам следует пересмотреть свой подход imo .. Если вы хотите сделать это для аутентификации, это ОПРЕДЕЛЕННО неправильный путь (с очень небольшими шансами на исключение) { {1}} Используйте атрибут [Authorize]
на вашем контроллере или методе вместо этого :)
UPD: , если у вас есть некоторые проверки безопасности в методе Initialise, и у пользователя нет доступа к этому методу, вы можете сделать несколько вещей: a)
Response.StatusCode = 403;
Response.End();
Это вернет пользователя на страницу входа в систему. Если вы хотите отправить его в произвольное расположение, вы можете сделать что-то вроде этого (cautios: pseudocode)
Response.Redirect(Url.Action("action", "controller"));
Нет необходимости указывать полный URL-адрес. Этого должно быть достаточно. Если вы полностью настаиваете на полном URL:
Response.Redirect(new Uri(Request.Url, Url.Action("action", "controller")).ToString());
RedirectToAction("actionName", "controllerName");
Есть и другие перегрузки, проверьте!
Кроме того, если вы новичок и не используете T4MVC , я бы порекомендовал вам его использовать!
Он дает вам интеллект для действий, контроллеров, представлений и т. Д. (Больше никаких магических строк)