2014-01-17 2 views
0

Я пытаюсь настроить свои маршруты, чтобы я мог иметь запись в блоге (с идентификатором строки), являющуюся единственным сегментом в URL-адресе.. Net MVC Route с ID только

Например,

/ABlogTitle -> Controller = "Блог", действие = "запись", Id = "ABlogTitle"

Мое предположение, что если маршрут не удается из-за действий не существует , он будет повторять попытку, используя следующий маршрут, но это, похоже, не работает.

Вот мои маршруты ...

routes.MapRoute(
    name: "Entries", 
    url: "{id}", 
    defaults: new {controller = "Blog", action = "Entry"} 
); 

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Blog", action = "Index", id = UrlParameter.Optional } 
); 
+0

Что ошибка вы получаете? –

+0

Я получаю 404 при навигации к "/ ABlogTitle" – unforgiven1987

ответ

1

Нет, ваше предположение неверно. Когда запрос соответствует маршруту, MVC не проходит через остальную часть маршрутов в коллекции.

В этом случае запрос /ABlogTitle соответствует 1-му маршруту в коллекции, и больше не проводится маршрутное зондирование, а остальная часть трубопровода (выбор контроллера, выбор действия и т. Д.) Имеет место.

0

Чтобы ограничить соответствие или использовать префикс как/entry/{id}, вам необходимо использовать регулярное выражение типа RouteContraint.

В противном случае, маршрут, который вы настроили для «Записи», будет соответствовать каждому URL-адресу.

http://www.dotnet-tricks.com/Tutorial/mvc/KIWF010113-Route-Constraints-in-Asp.Net-MVC-with-example.html

Или проверить новый маршрут, доступный в последнем MVC и Web API релизов:

http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx