2017-01-22 4 views
0

У меня проблема с моей конфигурацией маршрута (MVC 5). У меня есть несколько маршрутов с одной и той же сигнатурой параметра (такое же количество параметров и тип параметра).MVC route config same url paramater подпись

В нижеследующем коде настройки конфигурации 2 - это болтовые головки. Нормальные сообщения обратно на сервер должны получить путь по умолчанию внизу, но вместо этого захватить тот, который посередине, из-за той же самой сигнатуры.

Я не могу найти способ сделать средний из уникальных по умолчанию в нижней части. Мне все еще нужен средний, чтобы иметь только те 2 строки (action и gameHtmlAbbr).

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: null, 
      url: "{gameConsoleHtmlAbbr}", 
      defaults: new { Controller = "Game", action = "GameList", gameConsoleHtmlAbbr = (string)null } 
     ); 

     routes.MapRoute(
      name: null, 
      url: "{action}/{gameHtmlAbbr}", 
      defaults: new { Controller = "Game", action = "Snes", gameHtmlAbbr = (string)null } 
     ); 

     routes.MapRoute(
      name: null, 
      url: "{controller}/{action}", 
      defaults: new { controller = "Game", action = "GameList" } 
     ); 
    } 
} 
+1

2-й и 3-й из них имеет 2 сегмента, поэтому все, что имеет 2 сегмента, будет соответствовать 2-м. Вы можете сделать 2-й (скажем) 'url:« Snes/{gameHtmlAbbr} ', поэтому его уникальный, и'/Snes/someThing' будет соответствовать второй задаче –

+0

. Я имею несколько методов действий, которые используют второй. Например, Genesis/{gameHtmlAbbr} и т. д. Должен ли я выполнять отдельные маршруты для каждого метода действий? – mgmedick

+2

В таком случае вам понадобится конкретный маршрут для каждого метода. –

ответ

1

Как вы 2-й и 3-й маршруты определить маршрут с 2-х сегментов (но ничего различать между ними), и потому, что маршруты подобраны в порядке, они определены, любой URL с 2-х сегментов будет соответствовать 2-й (и 3-й маршрут никогда не будет выполняться)

Вам нужно определить конкретный маршрут для каждого метода, например, ударить Snes() метод GameController добавить конкретный маршрут перед маршрутом по умолчанию (и удалить ваш второй маршрут

routes.MapRoute(
    name: "Snes", 
    url: "Snes/{gameHtmlAbbr}", 
    defaults: new { Controller = "Game", action = "Snes", gameHtmlAbbr = (string)null } 
);