我花了一点时间,但我想出了如何使扩展与 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 下可以正常工作。(至少在我的 PC 上可以。)
作为奖励,如果您在页面中使用 Html.ActionLink(),则不必更改整个站点中的任何其他代码行。此方法负责正确标记控制器的 .aspx 扩展名。