Как мне перенаправить все на один контроллер? - PullRequest
3 голосов
/ 23 сентября 2011

У меня есть три конкретных маршрута:

    routes.MapRoute(
       "Home Page",
       "", 
       new { controller = "Home", action = "Index" } 
       );

    routes.MapRoute(
       "Admin Section",
       "AdminSection/{action}/{id}",
       new { controller = "AdminSection", action = "Index", id = UrlParameter.Optional }
       );

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

По сути, первые два маршрута работают, как и планировалось, однако я хочу, чтобы все, что не относится к конкретному маршруту, было перенаправлено на контроллер listings.

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

Я использовал RouteDebugger, и я вижу, что он попадает в маршрут, но проблема в том, что он пойдет на контроллер Listings, только если контроллер не указан - но, очевидно, что-то всегда будет есть.

Я пробовал несколько разных комбинаций - я думал, что я победил, удалив часть URL {controller} и определив значение по умолчанию, но мне не очень повезло.

Кто-нибудь знает, что мне нужно делать?

Ответы [ 3 ]

4 голосов
/ 23 сентября 2011

Как насчет этого:

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

site.com / test:

Это будет action: test, controller: listing, id = blank

enter image description here

3 голосов
/ 23 сентября 2011

Редактировать: Насколько я понимаю, вам нужен универсальный маршрут.

http://richarddingwall.name/2008/08/09/three-common-aspnet-mvc-url-routing-issues/

routes.MapRoute("Listings", "{*url}",
    new { controller = "Listings", action = "Index" }
);

Оригинал:

Сейчас я не могу это проверить, но

routes.MapRoute(
   "Listings",
   "{anythingOtherThanController}/{action}/{id}",
   new { controller = "Listings", action = "Index", id = UrlParameter.Optional }
   );

Это должно сработать.

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

Основная проблема здесь заключается в том, что / some / action будет сопоставлено с тем же действием, что и / another / action. Поэтому я не уверен, что вы пытаетесь сделать здесь:)

1 голос
/ 23 сентября 2011

Укажите маршрут по умолчанию и укажите имя контроллера в качестве контроллера списков. Держите это отображение маршрута в нижней части всех отображений.

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

Извините, я перепутал последовательность.

...