Какова правильная конфигурация или маршрутизация, чтобы Default.aspx, "" и "~ /" не маршрутизировались? - PullRequest
0 голосов
/ 18 августа 2011

У меня есть проблеск.

выделяет пустую строку на вкладке маршрутов

Match Area Url Data constraints DataTokens

True Root -- --

Локально кажется, что cassini неправильно эмулирует виртуальный каталог, поэтому изменение с localhost на localhost/site не дает никаких дополнительных сведений о тестировании.

  • Локальное тестирование
    • Кассини (Windows 7 (доступны 32 и 64 бит))
    • , кажется, не использует или не разрешает встроенный
  • развертывание сред
    • IIS7 Integrated
    • Попробовал настройку маршрутизации http, чтобы подтолкнуть / к /site, однако я столкнулся с проблемой косой черты (/site приведет к /site/site, в то время как /site/ будет работать как ожидалось
  • web.config
    • пробовал несколько способов установки runAllManagedModules=false с различными ошибками
    • с использованием <remove name="UrlRoutingModule-4.0" /> <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />, который был связан
  • пробовал

Мне нужно /site (/~) запросов для перехода на ~/Default.aspx очень хотелось бы, чтобы туда ходил /.

Как мне это сделать?

1 Ответ

0 голосов
/ 18 августа 2011

Чтобы включить Default.aspx в качестве URL-адреса по умолчанию, вам просто нужно удалить обработку маршрута, чтобы не было универсального маршрута.

По умолчанию все проекты MVC 3 имеют:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

Это универсальный маршрут, который будет соответствовать всему , который вы проходите в своем URL.Если вы удалите это, и путь не будет определен, он будет использовать все, что вы настроили в качестве страницы по умолчанию в вашей web.config.

Чтобы отобразить /site в Default.aspx, вам просто нужно добавить специальный маршрут:

routes.MapPageRoute("SitetoDefault", "site", "~/Default.aspx");

Это увидит /site и направит его на страницу по умолчанию.

Вам нужно быть осторожным при добавлении любых других маршрутов в таблицу маршрутизации.Все они должны иметь определенный контроллер, или вам нужно будет добавить ограничение маршрутизации.Примерно так:

//controller defined
routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

//route constraint
routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new {
        controller = "Home",
        action = "Index",
        id = UrlParameter.Optional
    }, // Parameter defaults
    new { controller = "^(products)|(account)|(home)$" }
);

Подробнее о создании более сложной маршрутизации: http://www.asp.net/mvc/tutorials/creating-a-custom-route-constraint-cs

...