Это заняло у меня немного времени, но я понял, как заставить расширения работать с 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://[websitepting/ перестают работать правильно. Так как это исправить?
Что ж, вам нужно определить второй маршрут. К сожалению, использование 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://[websitepting/ снова начнут работать, я думаю, потому что они успешно сопоставляются с домашним контроллером. Итак, полное решение:
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 для контроллера.
person
Community
schedule
25.11.2008