2012-02-17 6 views
13

Estoy tratando de identificar cómo asignar una ruta para/News/5 a mi controlador de noticias.Cómo asignar una ruta para/News/5 a mi controlador de noticias

Esta es mi NewsController:

public class NewsController : BaseController 
{ 
    // 
    // GET: /News 

    public ActionResult Index(int id) 
    { 
     return View(); 
    } 

} 

Ésta es mi regla Global.asax.cs:

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

intento ir a/Noticias/5, pero recibo un error de recurso no encontrado Sin embargo, al ir a/News/Index/5, ¿funciona?

He intentado solo {controller}/{id} pero eso acaba de producir el mismo problema.

Gracias!

+2

Cuando intentó '{controlador}/{id} '¿Mantuvo la acción en los valores predeterminados? 'new {controller =" News ", action =" Index ", id = -1}' – Lazarus

Respuesta

18

Su ruta {controller}/{id} fue correcta pero usted probablemente lo ha registrado DESPUÉS de la otra ruta. En la lista de rutas, busca de arriba hacia abajo y la primera coincidencia encuentra ganancias.

Para ayudar a dirigir el enrutamiento, sugiero crear restricciones de ruta para asegurar que # 1 el controlador exista y # 2 el {id} es un número.

Ver this article

Principalmente:

routes.MapRoute( 
     "Index Action", // Route name 
     "{controller}/{id}", // URL with parameters EDIT: forgot starting " 
     new { controller = "News", action = "Index" }, 
     new {id= @"\d+" } 
    ); 
+0

Muchas gracias, no puedo aceptar tu mensaje durante 8 minutos, pero volveré. Solucionaste mi problema con las restricciones: 'new {controller =" News ", id = @" 0 | -? [1-9] \ d * "} // Restricciones de ruta' y moverlo por encima de la otra ruta de mapa – ElveMagicMike

6

Es necesario asegurarse de que su nueva ruta antes de su ruta por defecto, así:

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


    routes.MapRoute(
     "News", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "News", action = "Index", id = -1 } // Parameter defaults 
    ); 
Cuestiones relacionadas