2012-07-24 14 views
5

Estoy tratando de crear una ruta en la tabla de ruta que se dirige a un elemento virtual (usando un cms que crea url como example.com/about/company, donde no existe un archivo físico llamado compañía) usando system.web.routing (desafortunadamente no puedo usar iis rewriting/routing). He intentado lo siguiente, pero resulta en 404. Si tuviera que apuntar a otro archivo físico (para fines de prueba), el enrutamiento funciona bien.Enrutamiento al elemento virtual

void RegisterRoutes(RouteCollection routes) 
{ 
    routes.RouteExistingFiles = true; 
    routes.MapPageRoute("about", "about/us", "~/about/company", false); 
} 

Entonces, ¿es posible señalar un artículo como ese?

+0

favor, eche un vistazo a este artículo que podría ayudar con la estructura de carpetas de enrutamiento: ** http: //www.codeproject.com/Articles/77199/URL-Routing-with-ASP-NET- 4-0 ** –

+0

Gracias pero parece que en el artículo el autor también señala el archivo físico. – xoail

+0

Sí, pero si estoy en lo cierto, creo que debería redirigir a un archivo físico y mostrar el contenido depende del valor que pase. ¡¡¡También las referencias que los artículos tienen tienen buena información !! –

Respuesta

1

Espero que esto lo ayude, este ejemplo específico es para Sitecore pero el proyecto es de código abierto y me imagino que no sería demasiado difícil volver a diseñar las piezas que necesita para su solución.

El objetivo de este proyecto es permitirle utilizar el motor de enrutamiento MVC con una solución de formularios web. Agregaré el cavet que necesitará profundizar un poco en el código, pero espero que lo ponga en el camino correcto.

https://github.com/Sitecore/Sitecore-Mvc-Routing

1

No podrá lograr su objetivo deseado con MapPageRoute. MapPageRoute funciona creando una nueva ruta con un PageRouteHandler. La documentación para el PageRouteHandler Class establece específicamente:

pasa una instancia de PageRouteHandler al constructor Ruta en fin de asignar una dirección URL de un archivo físico. El objeto PageRouteHandler especifica la ruta virtual del archivo físico y determina si se verifican las reglas de autorización para la URL física.

Si se trata de una aplicación MVC, hay extensiones para el enrutamiento en el RouteCollectionExtensions Class. Usted debe ser capaz de utilizar el método MapRoute y alimentar los parámetros por defecto necesarios para crear una nueva ruta con MvcRouteHandler así:

routes.MapRoute("about", "about/us", new { controller = "about", action="company", id="" }); 

usted tendrá que poner en los valores apropiados ya que no sé su diseño del controlador Además, eche un vistazo al Creating Custom Routes (C#), que puede ser útil para entender cómo maneja MVC el enrutamiento.

Si esta no es una aplicación MVC, deberá implementar un controlador de ruta personalizado derivado del UrlRoutingHandler Class y agregar una nueva ruta a RouteCollection.

+0

Esta no es una aplicación de mvc. ¿Alguna guía/ejemplo que apunta a crear manejadores de ruta personalizados? – xoail

+0

No lo he probado, pero creo que puede anular el método ProcessRequest en su controlador derivado y hacer una llamada 'Response.Redirect'. http://msdn.microsoft.com/en-us/library/cc680109(v=vs.90).aspx – JamieSee

1

Para enrutar a un destino sin extensión como /content/something, necesita utilizar el modo integrado en el grupo de aplicaciones de IIS. Si no puede cambiar esto, entonces no hay una manera fácil de hacer lo que quiera, aparte de configurar un controlador 404 personalizado y tratarlo manualmente desde allí. Esta es probablemente la causa de tus errores 404.

Además, RouteExistingFiles debería ser probablemente falso. Está tratando de enrutar cosas que no existen como archivos. Si configura RouteExistingFiles = true, el tratamiento predeterminado para los archivos que existen NO se usará cuando coincida una ruta. Todo lo que quiere hacer es tratar con rutas que no existen, pero que representan el contenido de una base de datos, ¿verdad? Así que deja esto en falso.

Finalmente, su declaración MapPageRoute parece ser incorrecta. Por ejemplo, en el tutorial de Microsoft, puede ser que parezca: http://msdn.microsoft.com/en-us/library/dd329551.aspx

routes.MapPageRoute("SalesRoute", 
    "SalesReport/{locale}/{year}", 
    "~/sales.aspx"); 

que causaría a juego rutas para invocar sales.aspx en respuesta. En su ejemplo, el objetivo es ~/about/company que parece una ruta, no un objetivo real: su objetivo real que maneja la solicitud CMS debe tener una extensión aspx.

Cuestiones relacionadas