Cómo asignar una ruta para /News/5 a mi controlador de noticias
-
27-10-2019 - |
Pregunta
Estoy intentando identificar cómo asignar una ruta para /News/5 a mi controlador de noticias.
Este es mi controlador de noticias:
public class NewsController : BaseController
{
//
// GET: /News
public ActionResult Index(int id)
{
return View();
}
}
Esta 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 /News/5 pero recibo un error de recurso no encontrado, sin embargo, cuando voy a /News/Index/5, ¿funciona?
lo he intentado solo {controller}/{id}
pero eso solo produjo el mismo problema.
¡Gracias!
Solución
Su {controller}/{id}
La ruta era correcta pero probablemente la registró DESPUÉS de la otra ruta.En la lista de rutas busca de arriba hacia abajo y gana la primera coincidencia que encuentra.
Para ayudar a dirigir el enrutamiento, sugeriría crear restricciones de ruta para garantizar que el controlador #1 exista y el #2 el {id}
es un número.
Ver Este artículo
Principalmente:
routes.MapRoute(
"Index Action", // Route name
"{controller}/{id}", // URL with parameters EDIT: forgot starting "
new { controller = "News", action = "Index" },
new {id= @"\d+" }
);
Otros consejos
Debes asegurarte de que tu nueva ruta esté antes que tu ruta predeterminada, 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
);