Come mappare un percorso per / News / 5 al mio controller di notizie
-
27-10-2019 - |
Domanda
Sto cercando di identificare come mappare un percorso per / News / 5 al mio controller di notizie.
Questo è il mio NewsController:
public class NewsController : BaseController
{
//
// GET: /News
public ActionResult Index(int id)
{
return View();
}
}
Questa è la mia regola Global.asax.cs:
routes.MapRoute(
"News", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "News", action = "Index", id = -1 } // Parameter defaults
);
Provo ad andare su / News / 5 ma ricevo un errore di risorsa non trovata, tuttavia quando vado a / News / Index / 5 funziona?
Ho provato solo {controller}/{id}
ma questo ha prodotto lo stesso problema.
Grazie!
Soluzione
La tua rotta {controller}/{id}
era corretta ma probabilmente l'hai registrata DOPO l'altra rotta.Nell'elenco delle rotte cerca dall'alto verso il basso e la prima corrispondenza che trova vince.
Per aiutare a guidare il routing, suggerirei di creare vincoli di route per garantire che # 1 esista il controller e # 2 il {id}
sia un numero.
Consulta questo articolo
Principalmente:
routes.MapRoute(
"Index Action", // Route name
"{controller}/{id}", // URL with parameters EDIT: forgot starting "
new { controller = "News", action = "Index" },
new {id= @"\d+" }
);
Altri suggerimenti
Devi assicurarti che il tuo nuovo percorso sia prima del percorso predefinito, in questo modo:
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
);