Прямой маршрут к пользовательскому поиску с MVC
Мне нужно создать собственный маршрут с MVC, чтобы создать собственный поиск:
Индекс Home Home's Action:
public virtual ActionResult Index()
{
return View();
}
И я хотел бы прочитать такую строку:
public virtual ActionResult Index(string name)
{
// call a service with the string name
return View();
}
Для URL, как:
www.company.com/name
Проблема в том, что у меня есть эти два маршрута, но они не работают:
routes.MapRoute(
name: "Name",
url: "{name}",
defaults: new { controller = "Home", action = "Index", name = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", area = "", id = UrlParameter.Optional }
);
Таким образом, любой контроллер, кроме Home, перенаправляется на Home, и если я переключаю порядок, он не может найти действие Index Home.
1 ответ
Вы можете использовать атрибут маршрутизации для этого. Вы можете увидеть подробности о пакете здесь. После установки атрибута пакета маршрутизации. Теперь он установлен по умолчанию для приложения MVC5. Измените свой метод действия, как показано ниже:
[GET("{name}")]
public virtual ActionResult Index(string name)
{
// call a service with the string name
return View();
}
Вот уловка для кода выше: маршрутизатор будет отправлять запросы без имени также этому методу действия. Чтобы избежать этого, вы можете изменить его, как показано ниже:
[GET("{name}")]
public virtual ActionResult Index2(string name)
{
// call a service with the string name
return View("Index");
}