2009-03-03 11 views
5

He configurado un proyecto ASP.NET MVC, y todo funciona bien, pero tengo un problema con el enrutamiento. Mi Global.asax se ve así:El enrutamiento de URL ASP.NET MVC no me da URLs bonitas

public static void RegisterRoutes(RouteCollection routes) { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

Así que, nada fuera de lo común. Mi problema es que cuando me enlace a un controlador/acción/params con un Html.ActionLink así:

<%= Html.ActionLink("My link", "SomeAction", "SomeController", new {param="someParam"})%> 

debe generar (al menos lo que tiene sentido en mi cabeza) un enlace tales como: http://www.localhost/SomeController/SomeAction/someParam.

Pero en cambio, genera un enlace como este: http://localhost/SomeController/SomeAction?param=someParam

Si i manualmente crear un vínculo que enlaza con el resultado esperado (SomeController/algunaAccion/someParam), entonces el controlador y la acción correcta se llaman, pero el parámetro definido en el método de acción siempre es nulo.

¿Alguna idea?

Respuesta

4

creo que enlace solamente se usará la ruta por defecto, como se puede esperar si el nombre del parámetro es id en lugar de param. Tendrá que crear una ruta diferente si desea proporcionar algún otro parámetro allí.

+0

Hmmm, entonces esto significa que tengo que especificar una nueva regla de enrutamiento para cada nueva acción del controlador que requiere un conjunto diferente de parámetros? Esto daría como resultado una gran cantidad de reglas de enrutamiento para una aplicación empresarial. ¿No hay un enfoque más dinámico que eso? – Erik

+1

Si esto fuera realmente dinámico, ¿no perdería la seguridad del tipo, la seguridad de los parámetros y la capacidad de prueba? – bzlm

5

intento de añadir:

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