Проблема маршрутизации MVC, 404 и непревзойденные маршруты - PullRequest
1 голос
/ 11 августа 2011

Я пытаюсь настроить схему маршрутизации в MVC3, которая соответствует устаревшей системе (SP 2007).Вот маршруты, которые я настроил:

routes.MapRoute("administration", 
    "Administration/{action}/{id}", 
    new { controller = "Administration", action = "Index", id = UrlParameter.Optional });
routes.MapRoute("workOrderSearch", 
    "WorkOrderSearch", 
    new {controller = "Home", action = "WorkOrderSearch"});
routes.MapRoute("customers",
    "{customerNumber}/{action}", 
    new {controller = "customer", action = "Index"}, 
    new {customerNumber = @"\d*"});
routes.MapRoute("graphicNames",
    "{customerNumber}/{graphicNameId}/{action}/{id}", 
    new {controller="GraphicName", action="Index", id=UrlParameter.Optional}, 
    new {customerNumber = @"\d*",graphicNameId = @"\d*", action=@"\w*"});
routes.MapRoute("workOrders", 
    "{customerNumber}/{graphicNameId}/{graphicNumber}/WorkOrder/{action}/{id}", 
    new { controller = "WorkOrder", action = "Index", id = UrlParameter.Optional }, 
    new { graphicNameId = @"\d*", graphicNumber = @"\d*-\d*" });
routes.MapRoute("graphics", 
    "{customerNumber}/{graphicNameId}/{graphicNumber}/{action}", 
    new { controller = "Graphic", action = "Index", id = UrlParameter.Optional }, 
    new { graphicNameId = @"\d*", graphicNumber = @"\d*-\d*" });

routes.MapRoute("Default", "", new { controller = "Home", action = "Index", id = UrlParameter.Optional });

В основном работает просто отлично.Однако при попытке попасть по маршруту «graphicNames» я столкнулся с проблемой.Если я использую этот URL:

http://localhost:1234/1234/321/Index

, он работает нормально, и я получаю действие Index на контроллере GraphicName.Однако, если я сделаю это:

http://localhost:1234/1234/321

, я получу 404.

Все остальные маршруты работают должным образом.

Редактировать:Решением было добавить ограничение в маршрут клиента, чтобы действия были только 'action = @ "[A-Za-z] *"

1 Ответ

1 голос
/ 12 августа 2011

Выше:

routes.MapRoute("graphicNames",
"{customerNumber}/{graphicNameId}/{action}/{id}", 
new {controller="GraphicName", action="Index", id=UrlParameter.Optional}, 
new {customerNumber = @"\d*",graphicNameId = @"\d*", action=@"\w*"});

, однако до этого у вас есть

routes.MapRoute("customers",
"{customerNumber}/{action}", 
new {controller = "customer", action = "Index"}, 
new {customerNumber = @"\d*"});

, который на основе вашего URL только с ДВУМИ параметрами / 1234/321 будет соответствовать маршруту клиента первым.Либо добавьте ограничение маршрута, что действие должно быть только альфа, либо переместите его ниже вашего маршрута graphicNames, поскольку порядок очень важен при сопоставлении маршрута.

...