ASP.NET MVC: Что корректный путь состоит в том, чтобы перенаправить к страницам/действиям в MVC?

Я довольно плохо знаком с 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 движение..

28
задан Community 23 May 2017 в 12:09
поделиться

3 ответа

1) Когда пользователь выходит из системы (выход из системы в действии), я хочу перенаправить на страницу входа.

public ActionResult Logout() {
    //log out the user
    return RedirectToAction("Login");
}

2) В событии контроллера или базового контроллера, например Initialze, я хочу перенаправить на другую страницу (AbsoluteRootUrl + Controller + Action)

Почему вы хотите перенаправить из инициализации контроллера?

механизм маршрутизации автоматически обрабатывает входящие запросы, если вы имеете в виду, что хотите перенаправить из действия index на контроллере, просто выполните:

public ActionResult Index() {
    return RedirectToAction("whateverAction", "whateverController");
}
26
ответ дан 28 November 2019 в 03:41
поделиться

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());
5
ответ дан 28 November 2019 в 03:41
поделиться
RedirectToAction("actionName", "controllerName");

Есть и другие перегрузки, проверьте!

Кроме того, если вы новичок и не используете T4MVC , я бы порекомендовал вам его использовать!

Он дает вам интеллект для действий, контроллеров, представлений и т. Д. (Больше никаких магических строк)

2
ответ дан 28 November 2019 в 03:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: