asp.net - net - route controller c#
AsignaciĆ³n de rutas MVC de ASP.Net (5)
Acabo de responder mi propia pregunta. Tenía las rutas hacia atrás (el valor predeterminado era la página de arriba).
Sí, tienes que poner todas las rutas personalizadas por encima de la ruta predeterminada.
Entonces, esto nos lleva a la siguiente pregunta ... ¿cómo se compara la ruta "Predeterminada" (supongo que usan expresiones regulares aquí) la ruta "Página"?
La ruta predeterminada coincide con lo que llamamos Convención sobre configuración. Scott Guthrie lo explica bien en su primera publicación de blog en ASP.NET MVC. Recomiendo que lo leas y también sus otras publicaciones. Tenga en cuenta que estos se publicaron en base al primer CTP y el marco ha cambiado. También puede encontrar web cast en ASP.NET MVC en el sitio asp.net por Scott Hanselman.
Soy nuevo en MVC (y el enrutamiento ASP.Net). Estoy tratando de asignar * .aspx a un controlador llamado PageController
.
routes.MapRoute(
"Page",
"{name}.aspx",
new { controller = "Page", action = "Index", id = "" }
);
¿El código anterior no se correlacionaría * .aspx con PageController
? Cuando ejecuto esto y escribo en cualquier página .aspx recibo el siguiente error:
No se pudo encontrar el controlador para la ruta ''/ página.aspx'' o no implementa la interfaz IController. Nombre del parámetro: controllerType
¿Hay algo que no estoy haciendo aquí?
Acabo de responder mi propia pregunta. Tenía las rutas hacia atrás (el valor predeterminado era la página de arriba). Debajo está el orden correcto. Entonces, esto nos lleva a la siguiente pregunta ... ¿cómo se compara la ruta "Predeterminada" (supongo que usan expresiones regulares aquí) 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 screencasts MVC Storefront de Rob Conery, se encuentra con este problema exacto. Es alrededor de los 23 minutos si estás interesado.
No estoy seguro de cómo se ve su controlador, el error parece estar apuntando al hecho de que no puede encontrar el controlador. ¿Heredó fuera de Controller después de crear la clase PageController? ¿Está el PageController en el directorio 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 con MvcRouteVisualizer