Maproute не работает на префиксе? - PullRequest
0 голосов
/ 03 апреля 2012

Я создал приложение MVC, которое отлично работает. Теперь я хочу добавить пользовательские ключи в URL-адрес и проанализировать их. Он работает только для одного типа URL-адресов, а не для следующего, поэтому в чем проблема с ним.

Мой маршрутный маршрут:

 routes.MapRoute(null,"client_{client_key}",
          new 
          { 
              controller = "templates", action = "contents_page" 
          });
routes.MapRoute(null,"client_{client_key}/{keyword}", 
          new 
          { 
              controller = "templates", action = "contents_pagen"
          });

Мои URL:

Над URL работает нормально.

Оба типа URL не работают, я не получаю home.html в параметре ключевого слова в contents_pagen действии.

Мое действие:

public ActionResult contents_pagen(string client_key, string keyword, FormCollection frmColl)
{
}

Поэтому, пожалуйста, дайте мне знать, как я могу это исправить.

1 Ответ

0 голосов
/ 03 апреля 2012

Поменяйте местами записи вашего маршрута, чтобы более конкретный маршрут был первым:

routes.MapRoute(null,"client_{client_key}/{keyword}", 
    new 
    { 
        controller = "templates", action = "contents_pagen"
    });
routes.MapRoute(null,"client_{client_key}",
    new 
    { 
        controller = "templates", action = "contents_page" 
    });

В конвейере запросов распознаватель метода действия видит, что у вас есть параметр маршрута client_key, и сопоставляет его спервый доступный маршрут.

Если сначала поставить маршрут с ключевым словом param, MVC будет сопоставлять этот маршрут только в том случае, если ваш URL-адрес содержит параметры client_key и ключевого слова.В противном случае, если у вас есть только параметр client_key, он пропустит первый маршрут и совпадет со вторым.

...