首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET MVC在IIS6上的应用

ASP.NET MVC在IIS6上的应用
EN

Stack Overflow用户
提问于 2008-08-29 08:45:19
回答 8查看 10.3K关注 0票数 25

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

我还没有看到任何现实的选择,为网络主机谁提供IIS7 7-主机。主要是因为我不住在美国。

因此,我想知道如何最好地使用ASP.NET MVC构建应用程序,并使其易于在IIS6和IIS7上部署。请记住,这是为标准的网络主机,所以没有访问ISAPI过滤器或IIS6内部的特殊设置。

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

更新:更大的问题之一是路线的问题。模式{控制器}/{action}将在IIS7上工作,但不适用于需要{controller}..mvc/{action}的IIS6。那我怎么才能让这个透明呢?同样,没有ISAPI无IIS-设置,请.

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-11-25 00:43:54

这花了我一点时间,但我想出了如何使扩展与IIS6一起工作。首先,您需要重新设计包含.aspx的基本路由,以便通过ASP.NET ISAPI筛选器路由它们。

代码语言:javascript
复制
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作为路由不能正常工作:

代码语言:javascript
复制
routes.MapRoute(
    "Default2",                                             // Route name
    "Default.aspx",                                         // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

那你是怎么让这件事起作用的?这就是您需要原始路由代码的地方:

代码语言:javascript
复制
routes.MapRoute(
    "Default2",                                             // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

当您这样做时,Default.aspx和http://[website]/都重新开始工作,我认为这是因为它们成功地映射回了Home控制器。因此,完整的解决方案是:

代码语言:javascript
复制
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扩展进行适当的标记。

票数 14
EN

Stack Overflow用户

发布于 2008-08-30 12:31:04

由于无法修改IIS设置将.mvc映射到ASP.Net,所以可以使用已经映射到ASP.Net的不同扩展。例如,您可以使用{controller}..ashx/{action},并且它应该在IIS 6上使用。

票数 7
EN

Stack Overflow用户

发布于 2008-08-29 16:58:31

如果您可以在服务器上安装ISAPI过滤器,则不必使用该扩展。

基本上,您将匹配的url路由到{控制器} .mvc品种,然后在ASP.NET中重写这个url以删除.mvc --这样就不必定义任何额外的路由或向用户公开.mvc。

我在这里写过:http://www.flux88.com/UsingASPNETMVCOnIIS6WithoutTheMVCExtension.aspx

Sanderson在这里也有一个很好的帖子:http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档