Как сопоставить маршрут для/Новости/5 для моего контроллера новостей
Я пытаюсь определить, как сопоставить маршрут для /News/ 5 для моего контроллера новостей.
Это мой NewsController:
public class NewsController : BaseController
{
//
// GET: /News
public ActionResult Index(int id)
{
return View();
}
}
Это мое правило Global.asax.cs:
routes.MapRoute(
"News", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "News", action = "Index", id = -1 } // Parameter defaults
);
Я пытаюсь перейти в /News/ 5, но я получаю сообщение об ошибке, не найденной, но при переходе в /News/Index/ 5 это работает?
Я пробовал только {controller}/{id}
, но это только что вызвало ту же проблему.
Спасибо!
Ответы
Ответ 1
Ваш маршрут {controller}/{id}
был верным, но вы, вероятно, зарегистрировали его ПОСЛЕ другого маршрута. В списке маршрутов он выполняет поиск сверху вниз, и первое совпадение, которое он находит, выигрывает.
Чтобы помочь маршрутизировать маршрутизацию, я предложил бы создать ограничения маршрута для этого, чтобы гарантировать, что # 1 существует контроллер, а номер 2 {id}
- число.
См. в этой статье
В основном:
routes.MapRoute(
"Index Action", // Route name
"{controller}/{id}", // URL with parameters EDIT: forgot starting "
new { controller = "News", action = "Index" },
new {id= @"\d+" }
);
Ответ 2
Вам нужно убедиться, что ваш новый маршрут до вашего маршрута по умолчанию, например:
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
);