Pregunta

Soy nuevo en MVC (y en el enrutamiento ASP.Net).Estoy tratando de mapear *.aspx a un controlador llamado PageController.

routes.MapRoute(
   "Page",
   "{name}.aspx",
   new { controller = "Page", action = "Index", id = "" }
);

¿No asignaría el código anterior *.aspx a PageController?Cuando ejecuto esto y escribo cualquier página .aspx, aparece el siguiente error:

No se pudo encontrar el controlador para la ruta '/Page.aspx' o no implementa la interfaz IController.Nombre del parámetro:tipo de controlador

¿Hay algo que no estoy haciendo aquí?

¿Fue útil?

Solución

Acabo de responder mi propia pregunta.Tenía las rutas al revés (el valor predeterminado estaba por encima de la página).

Sí, debes colocar todas las rutas personalizadas encima de la ruta predeterminada.

Entonces esto plantea la siguiente pregunta...¿Cómo coincide la ruta "predeterminada" (supongo que usan expresiones regulares aquí) la ruta "Página"?

La ruta predeterminada coincide según lo que llamamos Convención sobre configuración.Scott Guthrie lo explica bien en su primera publicación de blog sobre ASP.NET MVC.Te recomiendo que lo leas y también sus otras publicaciones.Tenga en cuenta que estos se publicaron en función del primer CTP y el marco ha cambiado.También puede encontrar transmisión web sobre ASP.NET MVC en el sitio asp.net de Scott Hanselman.

Otros consejos

Acabo de responder mi propia pregunta.Tenía las rutas al revés (el valor predeterminado estaba en la página anterior).A continuación se muestra el orden correcto.Entonces esto plantea la siguiente pregunta...¿Cómo coincide la ruta "Predeterminada" (supongo que aquí usan expresiones regulares) con la ruta "Página"?

routes.MapRoute(
            "Page",
            "{Name}.aspx",
            new { controller = "Page", action = "Display", id = "" }
        );

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

En uno de los escaparates MVC de Rob Conery capturas de pantalla, se encuentra con este problema exacto.Está alrededor del minuto 23 si estás interesado.

No estoy seguro de cómo se ve su controlador, el error parece indicar que no puede encontrar el controlador.¿Heredaste de Controller después de crear la clase PageController?¿El PageController está ubicado en el directorio de Controladores?

Aquí está mi ruta en Global.asax.cs

routes.MapRoute(
    "Page", 
    "{Page}.aspx", 
    new { controller = "Page", action = "Index", id = "" }
);

Aquí está mi controlador, que se encuentra en la carpeta Controladores:

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class PageController : Controller
    {
        public void Index()
        {
            Response.Write("Page.aspx content.");
        }
    }
}
public class AspxRouteConstraint : IRouteConstraint
{
    #region IRouteConstraint Members

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        return values["aspx"].ToString().EndsWith(".aspx");
    }

    #endregion
}

registrar la ruta para todos los aspx

  routes.MapRoute("all", 
                "{*aspx}",//catch all url 
                new { Controller = "Page", Action = "index" }, 
                new AspxRouteConstraint() //return true when the url is end with ".aspx"
               );

Y puedes probar las rutas por MvcRouteVisualizador

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top