asp.net-mvc - routeconfig - routes maproute parameters
Asp.Net MVC: el mejor enfoque para el enrutamiento "dinĂ¡mico" (1)
Siempre puedes usar una sintaxis catch all (no tengo idea si el nombre es correcto).
Ruta: routeTable.MapRoute( "Path", "{*path}", new { controller = "Pages", action = "Path" });
La acción del controlador se define como: public ActionResult Path(string path)
En la acción para el controlador, tendrás un camino, así que solo debes derramarlo y analizarlo.
Para llamar a otro controlador puede usar un RedirectToAction (creo que esta es la forma más adecuada). Con la redirección puede configurar una redirección permanente para ello. O usa algo como eso:
internal class MVCTransferResult : RedirectResult
{
public MVCTransferResult(string url) : base(url)
{
}
public MVCTransferResult(object routeValues)
: base(GetRouteURL(routeValues))
{
}
private static string GetRouteURL(object routeValues)
{
UrlHelper url = new UrlHelper(
new RequestContext(
new HttpContextWrapper(HttpContext.Current),
new RouteData()),
RouteTable.Routes);
return url.RouteUrl(routeValues);
}
public override void ExecuteResult(ControllerContext context)
{
var httpContext = HttpContext.Current;
// ASP.NET MVC 3.0
if (context.Controller.TempData != null &&
context.Controller.TempData.Count() > 0)
{
throw new ApplicationException(
"TempData won''t work with Server.TransferRequest!");
}
// change to false to pass query string parameters
// if you have already processed them
httpContext.Server.TransferRequest(Url, true);
// ASP.NET MVC 2.0
//httpContext.RewritePath(Url, false);
//IHttpHandler httpHandler = new MvcHttpHandler();
//httpHandler.ProcessRequest(HttpContext.Current);
}
}
Sin embargo, este método requiere ejecutarse en IIS o IIS Expres Casinni no admite un método Server.Transfer
Estoy tratando de encontrar un enfoque para crear un ruteo "dinámico". Lo que quiero decir, exactamente, es que quiero poder asignar el controlador y la acción de una ruta para cada golpe en lugar de tenerlo mapeado directamente.
Por ejemplo, una ruta puede parecerse a esta "ruta / {objeto}" y cuando se acelera esa ruta, se realiza una búsqueda que proporciona el controlador / acción apropiado para llamar.
Intenté descubrir los mecanismos para crear un controlador de ruta personalizado, pero la documentación / detectabilidad es un poco sospechosa en este momento (lo sé, es beta; no esperaría más). Aunque, no estoy seguro de si eso es incluso el mejor enfoque y tal vez una fábrica de controladores o incluso un controlador / acción predeterminado que realiza todas las asignaciones puede ser la mejor ruta (sin juego de palabras) para ir.
Cualquier consejo sería apreciado.