关于.net:IIS6上的ASP.NET MVC

关于.net:IIS6上的ASP.NET MVC

ASP.NET MVC on IIS6

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

对于提供IIS7托管的Web托管,我还没有看到任何可行的选择。 主要是因为我不住在美国

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

在开发针对IIS6的ASP.NET MVC应用程序时,还应该考虑什么? 任何功能不起作用?

更新:更大的问题之一是路线问题。 模式{controller} / {action}将在IIS7上工作,但不适用于需要{controller} .mvc / {action}的IIS6。 那么如何使它透明? 同样,请没有ISAPI和IIS设置。


我花了一点时间,但我想出了如何使扩展与IIS 6一起使用。首先,您需要对基本路由进行重新处理以包括.aspx,以便它们将通过ASP.NET ISAPI筛选器进行路由。

1
2
3
4
5
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作为路由无法正常工作:

1
2
3
4
5
routes.MapRoute(
   "Default2",                                             // Route name
   "Default.aspx",                                         // URL with parameters
    new { controller ="Home", action ="Index", id ="" }  // Parameter defaults
);

那么如何使它工作呢?好吧,这是您需要原始路由代码的地方:

1
2
3
4
5
routes.MapRoute(
   "Default2",                                             // Route name
   "{controller}/{action}/{id}",                           // URL with parameters
    new { controller ="Home", action ="Index", id ="" }  // Parameter defaults
);

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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扩展名。


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


如Phil Hack在本博客中所提到的,可以使用通配符应用程序映射在IIS 6中为ASP.NET MVC设置无扩展名的URL:

  • 在IIS 6中,转到ASP.NET MVC Web应用程序的"应用程序配置属性"。
  • 单击"通配符应用程序映射"部分中的"插入..."。
  • 将可执行文件设置为aspnet_isapi.dll的路径(在我的计算机上为c:\ windows \ microsoft.net \ framework \ v2.0.50727 \ aspnet_isapi.dll)。
  • 确保不要选中"验证该文件存在",然后单击"确定"。
  • 但是,正如Hack所提到的那样,这样做会影响性能。


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

    基本上,您将匹配的URL路由到{controller} .mvc品种,然后在ASP.NET中重写此URL以删除.mvc -这样做无需定义任何额外的路由或向用户公开.mvc。

    我在这里写过:
    http://www.flux88.com/使用ASPNETMVCOnIIS6WithoutTheMVCExtension.aspx

    史蒂夫·桑德森(Steve Sanderson)在这里也有一篇不错的文章:http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/


    使用IIS6,您可以执行以下两项操作之一:

  • 设置一个ISAPI筛选器以将MVC URL映射到ASP.NET
  • 在网址中包含扩展名。例如:htp://localhost/Home.mvc
  • 由于选项1在大多数Web主机上不可用,因此您必须使用数字2。


    网址重写可以帮助您解决问题。我已经实现了允许在任何IIS版本上部署MVC应用程序的解决方案,即使使用虚拟主机也是如此。
    http://www.codeproject.com/KB/aspnet/iis-aspnet-url-rewriting.aspx


    我在IIS6上有一个示例应用程序。

    我找到了快速解决方案。 (很脏,因为它包含带有扩展名的默认视图名称)。它不需要其他路由或任何特殊的东西。 (除非,您的默认路由必须为{controller} .aspx / {action} ...格式)

    这是default.aspx

    1
    2
    3
    4
    5
    6
    7
    8
    <%@ Page Language="C#"%>
    <script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        HttpContext.Current.RewritePath("~/Home.aspx/index");
        IHttpHandler httpHandler = new MvcHttpHandler();
        httpHandler.ProcessRequest(HttpContext.Current);
    }

    我的示例应用程序的默认操作是主目录中的index。

    注意:我在Phil Haack的博客中看到了此代码。感谢Brian Lowe。


    我有详细的分步指南,但是它要求您使用isapi_rewrite。在以下位置查看它:http://biasecurities.com/blog/2008/how-to-enable-pretty-urls-with-asp-net-mvc-and-iis6/


    推荐阅读

      linux自动运行命令?

      linux自动运行命令?,服务,系统,时间,代码,周期性,第一,命令,管理,在线,状态,l

      linux开启运行命令?

      linux开启运行命令?,系统,服务,工作,管理,状态,命令,标准,情况,环境,工具,lin

      linux运行wps命令?

      linux运行wps命令?,软件,官网,名称,时间,电脑,系统,工具,环境,项目,数据,wps

      linux运行cmd命令?

      linux运行cmd命令?,电脑,系统,状态,情况,环境,命令,单位,管理,设备,数据,电脑

      linux运行两个命令?

      linux运行两个命令?,网络,地址,系统,工作,暂停,命令,网站,密码,网上,入口,Lin

      linux命令运行代码?

      linux命令运行代码?,代码,单位,系统,环境,连续,保险,工具,命令,文件,音乐,Lin

      linux命令运行脚本?

      linux命令运行脚本?,代码,系统,工作,设计,状态,命令,脚本,文件,目录,终端,运

      linux上运行的命令?

      linux上运行的命令?,系统,工作,软件,网络,地址,信息,情况,命令,灵活,基础知

      linux怎么运行命令?

      linux怎么运行命令?,系统,工作,首页,工具,终端,地址,命令,信息,电脑,情况,怎

      linux右击运行命令?

      linux右击运行命令?,系统,工作,设备,标准,首页,发行,电脑,终端,命令,文件,lin

      linux如何运行命令?

      linux如何运行命令?,系统,工具,基础,代码,环境,管理,网络,初级,密码,终端,Lin

      linux接收命令运行?

      linux接收命令运行?,系统,工作,工具,信息,地址,命令,连续,代码,管理,发行,lin

      linux运行文件命令?

      linux运行文件命令?,地址,标准,命令,系统,设备,发行,数据,单位,文件,终端,Lin

      linux运行可执行命令?

      linux运行可执行命令?,系统,软件,工具,状态,暂停,代码,服务,命令,官方网站,

      linux命令行运行图形?

      linux命令行运行图形?,系统,密码,电脑,流程,工具,地方,代码,软件,环境,工作,

      linux运行命令截图?

      linux运行命令截图?,图片,系统,截图,工具,概念,代码,窗口,文件,命令,屏幕,Lin

      命令行运行程序linux?

      命令行运行程序linux?,地址,工作,系统,代码,命令,标准,信息,工具,文件,目录,l

      运行命令linux命令?

      运行命令linux命令?,工作,地址,系统,命令,信息,目录,工具,基础,管理,控制台,l

      linux中运行软件命令?

      linux中运行软件命令?,软件,环境,工具,系统,情况,适当,电脑,位置,发行,初级,l

      linux一直运行的命令?

      linux一直运行的命令?,系统,信息,地址,软件,进程,工具,工作,代码,状态,命令,l