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!

¿Fue útil?

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
    );
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top