tutorial net mvc español asp asp.net-mvc asp.net-mvc-4 asp.net-mvc-3 asp.net-mvc-5 asp.net-mvc-2-validation

asp.net mvc - net - Redirigir a una acción desde Application_BeginRequest en global.asax



mvc asp.net c# (8)

Además de las formas ya mencionadas. Otra forma es usar URLHelper, que utilicé en un escenario una vez que ocurrió el error y el usuario debe ser redirigido a la página de inicio de sesión:

public void Application_PostAuthenticateRequest(object sender, EventArgs e){ try{ if(!Request.IsAuthenticated){ throw new InvalidCredentialException("The user is not authenticated."); } } catch(InvalidCredentialException e){ var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext); Response.Redirect(urlHelper.Action("Login", "Account")); } }

En mi aplicación web estoy validando la url de glabal.asax. Quiero validar la url y necesito redirigir a una acción si es necesario. Estoy usando Application_BeginRequest para capturar el evento de solicitud.

protected void Application_BeginRequest(object sender, EventArgs e) { // If the product is not registered then // redirect the user to product registraion page. if (Application[ApplicationVarInfo.ProductNotRegistered] != null) { //HOW TO REDIRECT TO ACTION (action=register,controller=product) } }

¿O hay alguna otra forma de validar cada url al obtener solicitudes en mvc y redirigir a una acción si es necesario?


Lo hago así:

HttpContextWrapper contextWrapper = new HttpContextWrapper(this.Context); RouteData routeData = new RouteData(); routeData.Values.Add("controller", "Home"); routeData.Values.Add("action", "FirstVisit"); IController controller = new HomeController(); RequestContext requestContext = new RequestContext(contextWrapper, routeData); controller.Execute(requestContext); Response.End();

De esta manera, ajusta el contexto de la solicitud entrante y lo redirige a otro lugar sin redirigir al cliente. Por lo tanto, la redirección no activará otra BeginRequest en global.asax.


Prueba esto:

HttpContext.Current.Response.Redirect("...");


Puedes probar con esto:

Context.Response.Redirect ();

No estoy seguro.


Tenía una antigua aplicación de formularios web que tenía que convertir a MVC 5 y uno de los requisitos era admitir posibles enlaces .aspx {old_form}. En Global.asax Application_BeginRequest configuré una instrucción de cambio para manejar las páginas antiguas para redirigir a las nuevas y evitar el posible bucle no deseado a la verificación de ruta de inicio / predeterminada para ".aspx" en la URL sin formato de la solicitud.

protected void Application_BeginRequest(object sender, EventArgs e) { OldPageToNewPageRoutes(); } /// <summary> /// Provide redirects to new view in case someone has outdated link to .aspx pages /// </summary> private void OldPageToNewPageRoutes() { // Ignore if not Web Form: if (!Request.RawUrl.ToLower().Contains(".aspx")) return; // Clean up any ending slasshes to get to the old web forms file name in switch''s last index of "/": var removeTrailingSlash = VirtualPathUtility.RemoveTrailingSlash(Request.RawUrl); var sFullPath = !string.IsNullOrEmpty(removeTrailingSlash) ? removeTrailingSlash.ToLower() : Request.RawUrl.ToLower(); var sSlashPath = sFullPath; switch (sSlashPath.Split(Convert.ToChar("/")).Last().ToLower()) { case "default.aspx": Response.RedirectToRoute( new RouteValueDictionary { {"Controller", "Home"}, {"Action", "Index"} }); break; default: // Redirect to 404: Response.RedirectToRoute( new RouteValueDictionary { {"Controller", "Error"}, {"Action", "NotFound"} }); break; } }


Todo lo anterior no funcionará, estará en el bucle de ejecutar el método Application_BeginRequest .

Necesitas usar

HttpContext.Current.RewritePath("Home/About");


Utilice el siguiente código para redireccionar

Response.RedirectToRoute("Default");

"Por defecto" es el nombre de la ruta. Si desea redirigir a cualquier acción, simplemente cree una ruta y use ese nombre de ruta.


Response.RedirectToRoute( new RouteValueDictionary { { "Controller", "Home" }, { "Action", "TimeoutRedirect" }} );