c# - return redirect mvc 5
ASP.NET MVC: ¿Cuál es la forma correcta de redirigir a páginas/acciones en MVC? (3)
Soy bastante nuevo en MVC, pero no estoy seguro de qué Redirect ... reemplaza el redireccionamiento estándar utilizado en WebForms, es decir, el Response.Redirect()
estándar Response.Redirect()
Por ejemplo, necesito redireccionar a otras páginas en un par de escenarios:
1) Cuando el usuario cierra la sesión (Forms signout in Action) Quiero redirigir a una página de inicio de sesión.
2) En un evento Controlador o Controlador base, por ejemplo, Initialize
, quiero redireccionar a otra página (AbsoluteRootUrl + Controlador + Acción)
Parece que se llaman a múltiples redireccionamientos en algunos casos, lo que causa errores, ¿algo tiene que ver con el hecho de que una página ya se está redireccionando? ¿Cómo se puede cancelar la solicitud actual y simplemente redirigir?
Actualizar:
La respuesta a esta pregunta ( System.Web.Mvc.Controller Initialize ) indica que Initialize
no se debe utilizar y OnActionExecuting
debe utilizar?
¿Algún comentario sobre por qué Initialize
no debería usarse o por qué OnAuthorization
no es una mejor opción?
Más información:
Esta publicación de blog ( http://blog.wekeroad.com/blog/aspnet-mvc-securing-your-controller-actions/ ) indica que OnActionExecuting
es útil para la autenticación (como se indica en el enlace de arriba) Supongo que agregar esto a eso evento en la base La clase de controlador está bien, ya que cada página ejecuta una acción en MVC, por lo que no debería hacer mucha diferencia y tener la capacidad de redirigir debería ser más fácil. Esto tiene sentido, pero también parece tener sentido para mí que las cosas se podrían hacer en un evento antes de este evento y hace que nos preguntemos para qué sirven esos eventos. Estará dando OnActionExecuting
a go ..
1) Cuando el usuario cierra la sesión (Forms signout in Action), quiero redireccionar a una página de inicio de sesión.
public ActionResult Logout() {
//log out the user
return RedirectToAction("Login");
}
2) En un evento Controlador o controlador de base, por ejemplo, Initialze, quiero redirigir a otra página (AbsoluteRootUrl + Controller + Action)
¿Por qué querrías redirigir desde un controlador init?
el motor de enrutamiento maneja automáticamente las solicitudes que entran, si quiere decir que desea redirigir desde la acción de índice en un controlador, simplemente haga lo siguiente:
public ActionResult Index() {
return RedirectToAction("whateverAction", "whateverController");
}
1) Para redirigir a la página de inicio de sesión / desde la página de inicio de sesión, no use los métodos Redirect (). Utilice FormsAuthentication.RedirectToLoginPage()
y FormsAuthentication.RedirectFromLoginPage()
!
2) Debería usar RedirectToAction ("acción", "controlador") en escenarios normales. ¿Desea redirigir al lado del método Initialize? ¿Por qué? No veo por qué querrías hacer esto, y en la mayoría de los casos debes revisar tu enfoque. Si quieres hacer esto para la autenticación, esto es DEFINITIVAMENTE el camino equivocado (con muy pocas oportunidades para una excepción). el atributo [Authorize]
en su controlador o método en su lugar :)
UPD: si tiene algunas comprobaciones de seguridad en el método Initialise y el usuario no tiene acceso a este método, puede hacer un par de cosas: a)
Response.StatusCode = 403;
Response.End();
Esto enviará al usuario a la página de inicio de sesión. Si desea enviarlo a una ubicación personalizada, puede hacer algo como esto (caucios: pseudocódigo)
Response.Redirect(Url.Action("action", "controller"));
No es necesario especificar la URL completa. Esto debería ser suficiente. Si insiste completamente en la url completa:
Response.Redirect(new Uri(Request.Url, Url.Action("action", "controller")).ToString());
RedirectToAction("actionName", "controllerName");
También tiene otras sobrecargas, ¡por favor revisa!
Además, si eres nuevo y no estás usando T4MVC , ¡te recomendaría que lo uses!
Te da intellisence para acciones, controladores, vistas, etc. (no más cadenas de magia)