Это заняло у меня немного времени, но я понял, как заставить расширения работать с IIS 6. Во-первых, вам нужно переделать базовую маршрутизацию, чтобы включить .aspx, чтобы они направлялись через фильтр ASP.NET ISAPI.
routes.MapRoute(
"Default", // Route name
"{controller}.aspx/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
Если вы, например, перейдете на Home.aspx, ваш сайт должен работать нормально. Но Default.aspx и адрес страницы по умолчанию http://[website]/ перестают работать правильно. Так как это исправить?
Ну, вам нужно определить второй маршрут. К сожалению, использование Default.aspx в качестве маршрута не работает должным образом:
routes.MapRoute(
"Default2", // Route name
"Default.aspx", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
Так как же заставить это работать? Ну, вот где вам нужен оригинальный код маршрутизации:
routes.MapRoute(
"Default2", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
Когда вы сделаете это, Default.aspx и http://[website]/ оба снова начнут работать, я думаю, потому что они были успешно сопоставлены с контроллером Home. Итак, полное решение:
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}.aspx/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
routes.MapRoute(
"Default2", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
И ваш сайт должен начать нормально работать в IIS 6. (По крайней мере, на моем ПК).
И в качестве бонуса, если вы используете Html.ActionLink () на своих страницах, вам не нужно менять никакую другую строку кода на всем сайте. Этот метод заботится о том, чтобы правильно пометить расширение .aspx на контроллере.