Мне действительно трудно разобраться с маршрутизацией. Наверняка уже спрашивали, но я не нашел или не так спросил...

Я переношу существующий классический сайт asp и начинаю с добавления панели администратора. Что мне нужно, так это то, что когда пользователь просто вводит имя сайта, загружается документ по умолчанию (default.asp), однако, если они вводят {site}/Admin, маршрутизация вступает во владение. Мой контроллер маршрута по умолчанию называется «AdminController», и мой проект настроен для запуска в / Admin. Это работает, но все остальное не работает, если только я не вернусь к основному маршруту по умолчанию, который идет с новым проектом.

Желания:

  1. {сайт} -> {сайт}/default.asp
  2. {site}/Admin -> Действие администратора/индекса
  3. {site}/Admin/Shops -> Действие Shops/Index
  4. {site}/Admin/Shops/Edit/{id} -> Действие Shops/Edit(id)

Вот моя маршрутизация, я где-то застрял:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.RouteExistingFiles = true;
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "EditShop", // Route name
            "Shops/Edit/{slug}", // URL with parameters
            new
            {
                controller = "Shops",
                action = "Edit",
                slug = ""
            } // Parameter defaults
        );

        routes.MapRoute(
            "Shops", // Route name
            "Admin/Shops/", // URL with parameters
            new
            {
                controller = "Shops",
                action = "Index"
            } // Parameter defaults
        );

        // default route for this app
        routes.MapRoute(
            "Admin", // Route name
            "Admin/", // URL with parameters
            new { controller = "Admin", action = "Index" } // Parameter defaults
        );

       //  default route for this app (this works for all cases except default.asp)
        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Admin", action = "Index", id = UrlParameter.Optional } 
        );

        routes.MapRoute("NothingMatched", "{*url}",
                        new {controller = "Error", action = "Http404"});
    }
2
StuTheDog 13 Мар 2011 в 21:00

1 ответ

Я вижу, вы сопоставили EditShop с Shops/Edit. Это, вероятно, должно быть сопоставлено с Admin/Shops/Edit, чтобы достичь того, что вы хотите. С другим маршрутом проблем не вижу, но могу ошибаться.

0
arnehehe 13 Мар 2011 в 21:05
1
Спасибо, это заставило меня двигаться. По-прежнему возникают проблемы с загрузкой страницы по умолчанию без явного указания. Попытался создать PageRouteHandler() безуспешно. Должен быть способ указать IIS использовать маршрутизацию, за исключением случаев, когда можно загрузить страницу по умолчанию.
 – 
StuTheDog
14 Мар 2011 в 00:27
У нас та же проблема - если маршруты не указаны или соответствующие iis должны искать документ по умолчанию! надеюсь скоро будет...
 – 
toebens
5 Апр 2011 в 18:04