在哪里可以找到一些关于在IIS6上运行ASP.NET MVC的最佳实践的好指标?
我还没有看到任何提供IIS7托管的网站主机的现实选择。主要是因为我不住在美国。
所以我想知道如何你最好在ASP.NET MVC中构建应用程序,并使其易于可用于部署在IIS6和IIS7。请记住,这是标准的web主机,所以没有访问ISAPI过滤器或IIS6内的特殊设置。
在开发ASP.NET MVC应用程序以定位IIS6时,有没有其他人应该考虑?任何不工作的功能?
更新:一个更大的问题是路由的东西。模式{controller} / {action}将在IIS7上工作,而不是IIS6,它需要{controller} .mvc / {action}。那么如何让这个透明?再次,没有ISAPI和没有IIS设置,请。
解决方法
它花了我一点,但我想出了如何使扩展与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",id = "" } // Parameter defaults );
那么如何让这个工作?那么,这是你需要原始的路由代码:
routes.MapRoute( "Default2",// Route name "{controller}/{action}/{id}",id = "" } // Parameter defaults );
当你这样做,Default.aspx和http://[website]/都开始工作,我想,因为他们成功映射回家控制器。所以完整的解决方案是:
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",id = "" } // Parameter defaults ); routes.MapRoute( "Default2",// Route name "{controller}/{action}/{id}",id = "" } // Parameter defaults ); } protected void Application_Start() { RegisterRoutes(RouteTable.Routes); } }
和你的网站应该开始工作正常在IIS 6(至少它在我的电脑。
并且作为奖励,如果你在你的页面中使用Html.ActionLink(),你不应该改变整个网站的任何其他代码行。此方法负责在控制器的.aspx扩展名上正确标记。