当前位置:  开发笔记 > 后端 > 正文

IIS6上的ASP.NET MVC

如何解决《IIS6上的ASP.NETMVC》经验,为你挑选了2个好方法。

在哪里可以找到关于在IIS6上运行ASP.NET MVC的最佳实践的一些好的指针?

我还没有看到任何提供IIS7托管的网络主机的现实选项.主要是因为我不住在美国

所以我想知道如何在ASP.NET MVC中最好地构建应用程序,并使其可以轻松地在IIS6和IIS7上进行部署.请记住,这适用于标准Web主机,因此IIS6中无法访问ISAPI筛选器或特殊设置.

在开发ASP.NET MVC应用程序以定位IIS6时,还有什么需要考虑的吗?任何不起作用的功能?

更新:一个更大的问题是路线的问题.模式{controller}/{action}将适用于IIS7,但不适用于需要{controller} .mvc/{action}的IIS6.那么我该如何透明呢?请再说一遍,没有ISAPI,也没有IIS设置.



1> 小智..:

它花了我一点,但我想出了如何使扩展与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扩展名.



2> Sean Carpent..:

由于您无法修改IIS设置以将.mvc映射到ASP.Net,因此您可以使用已映射到ASP.Net的其他扩展.例如,您可以使用{controller} .ashx/{action},它应该在IIS 6上开箱即用.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有