Como mapear uma rota para / Notícias / 5 à minha controlador de notícias
-
27-10-2019 - |
Pergunta
Eu estou tentando identificar como mapear uma rota para / Notícias / 5 à minha controlador de notícias.
Este é o meu NewsController:
public class NewsController : BaseController
{
//
// GET: /News
public ActionResult Index(int id)
{
return View();
}
}
Esta é a minha regra Global.asax.cs:
routes.MapRoute(
"News", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "News", action = "Index", id = -1 } // Parameter defaults
);
Eu tento ir para / Notícias / 5, mas eu recebo um erro de recurso não encontrado, no entanto, quando vai / Notícias / Index / 5 funciona?
Eu tentei apenas {controller}/{id}
mas que apenas produziu o mesmo problema.
Obrigado!
Solução
A sua rota {controller}/{id}
foi correta, mas você problaby registrou após a outra rota. Na lista rota ele procura cima para baixo e a primeira partida que encontra vitórias.
para ajudar a orientar o roteamento eu sugeriria a criação de rotas restrições para isso para garantir que # 1 existe o controlador e # 2 a {id}
é um número.
Principalmente:
routes.MapRoute(
"Index Action", // Route name
"{controller}/{id}", // URL with parameters EDIT: forgot starting "
new { controller = "News", action = "Index" },
new {id= @"\d+" }
);
Outras dicas
Você precisa ter certeza de sua nova rota é antes de sua rota padrão, assim:
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
);