2012-04-16 12 views
5

Estoy tratando de enrutar un .aspx (página webforms) en mi proyecto asp.net mvc. Me registro en la página Global.asax:Después de agregar MapPageRoute a un proyecto asp.net mvc, el sitio se detiene para ingresar en Home Controller

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
routes.MapPageRoute("Tickets", "Reports/Tickets", "~/WebForms/Reports/Tickets.aspx"); 
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 

El problema es, después agrego la segunda línea, el sitio deja de entrar en mi Controlador Principal (Índice de Acción) y está redirigiendo a: http://localhost:37538/Reports/Tickets?action=Index&controller=Login%22 siempre que corro el proyecto.

Detalles del proyecto:

  • Asp.Net MVC 3
  • autenticación de formularios
  • .Net 4,0

Obs: Para reproducir este error, cree un nuevo proyecto asp.net mvc como aplicación de Internet, después de crear la página de formularios web Tickets dentro de una carpeta /WebForms/Reports y registrar la nueva ruta. Ejecute el proyecto (probablemente esté conectado), de modo que ahora cierre la sesión y será redirigido al http://localhost:35874/Reports/Tickets?action=LogOff&controller=Account, entonces ¿por qué?

Respuesta

10

¡Resuelto! Por lo tanto, debemos agregar un enrutamiento de ruta a la ruta de formularios web para garantizar que solo se capture en las rutas entrantes, no en la generación de ruta saliente.

Añadir la siguiente clase a su proyecto (ya sea en un nuevo archivo o la parte inferior de global.asax.cs):

public class MyCustomConstraint : IRouteConstraint{ 
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection){ 
     return routeDirection == RouteDirection.IncomingRequest; 
    } 
} 

a continuación, cambiar la ruta Las entradas para el siguiente:

routes.MapPageRoute(
    "Tickets", 
    "Reports/Tickets", 
    "~/WebForms/Reports/Tickets.aspx", 
    true, null, 
    new RouteValueDictionary { { "outgoing", new MyCustomConstraint() } } 
); 
+0

¡Gracias! Esto solucionó mis problemas cuando ya no podía iniciar sesión en mis páginas después de agregar MapPageRoute. El botón de enviar en la página de inicio de sesión en realidad publicó los valores en la ruta de la primera página. ¿Tiene alguna fuente que describa este comportamiento y el razonamiento detrás de esto? –

+1

Aquí algunos enlaces que me ayudan a llegar a la solución: http://dotnet.dzone.com/news/custom-route-constraint-aspnet, http://blogs.imeta.co.uk/MBest/archive/2010/ 01/06.aspx y http://www.eworldui.net/blog/post/2008/04/ASPNET-MVC---Legacy-Url-Routing.aspx –

+0

Pero específicamente sobre lo que quieres, no tengo. –

Cuestiones relacionadas