Прямой маршрут к пользовательскому поиску с 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");
}
Другие вопросы по тегам