Почему используется неправильный маршрут? - PullRequest
1 голос
/ 08 октября 2011

Я пытаюсь сделать то, что SO делает для своего контроллера вопросов.

  • /Posts/{id}/{title} при просмотре сообщения (название действия не отображается)
  • /Posts/New когда вы публикуете что-то новое.
  • /Posts/Delete/10 и т.д ....

У меня есть два настроенных маршрута (ну, один, если вы не считаете значение по умолчанию). Похоже, происходит то, что все действия в контроллере Post проходят через первый.

Что это? Я, очевидно, ошибаюсь, но не могу понять.

routes.MapRoute("ViewPosts",
    "Posts/{postid}/{title}",
    new { controller = "Posts", action = "View", postid = "", title = "" });

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

Ответы [ 2 ]

1 голос
/ 08 октября 2011

Первый маршрут обрабатывает все ваши запросы, который начинается с /Posts.

Вы должны использовать ограничения, чтобы {postid} был только числом:

routes.MapRoute("ViewPosts",
    "Posts/{postid}/{title}",
    new { controller = "Posts", action = "View", postid = "", title = "" },
    new { postid= @"\d+" });

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

1 голос
/ 08 октября 2011

Все маршруты проходят через первый, потому что вы не указали, что поле postid может быть только числовым, или определили более ранний маршрут, который перехватит /Posts/New. Он передает New как postid с действием View.

Вы можете добавить это определение маршрута перед теми, которые у вас есть:

routes.MapRoute("NewPost",
    "Posts/New",
    new{controller="Posts", action="New"});

Или каким бы ни был соответствующий контроллер / действие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...