ASP.NET MVC Framework 依赖于 URL 路由。为了利用 URL 路由,可能不得不在 Web 服务器上执行额外的配置步骤。这些步骤取决于 Internet Information Services (IIS) 的版本和应用程序的请求处理模式。

IIS 的最新版本是版本 7.0。IIS 的此版本包括在 Windows Server 2008 中。还可以在除 Home Basic 以外的任何 Vista 操作系统上安装 IIS 7.0(请参见http://technet.microsoft.com/en-us/library/cc732624.aspx)。

IIS 7.0 支持两种模式的处理请求。可以使用集成模式或经典模式。以集成模式使用 IIS 7.0 时不需要执行任何特殊配置步骤。但是以经典模式使用 IIS 7.0 时需要执行额外的配置。

Microsoft Windows Server 2003 包含 IIS 6.0。在使用 Windows Server 2003 操作系统时不能将 IIS 6.0 升级为 IIS 7.0。使用 IIS 6.0 时必须执行其他配置步骤。

Microsoft Windows XP Professional 包含 IIS 5.1。使用 IIS 5.1 时必须执行其他配置步骤。

最后,Microsoft Windows 2000 和 Microsoft Windows 2000 Professional 包含 IIS 5.0。使用 IIS 5.0 时必须执行其他配置步骤。

以下是不同 IIS 版本的总结:

  • IIS 7.0(集成模式)– 使用 URL 路由不需要特殊配置。
  • IIS 7.0(经典模式)– 需要执行特殊配置才能使用 URL 路由。
  • IIS 6.0 或更低版本– 需要执行特殊配置才能使用 URL 路由。

集成模式和经典模式

IIS 7.0 可以使用两种请求处理模式处理请求:集成模式和经典模式。集成模式可提供更好的性能和更多的功能。经典模式用于向早期的 IIS 版本提供向后兼容性。

请求处理模式由应用程序池决定。通过确定与应用程序关联的池,可以确定特定的 Web 应用程序使用何种处理模式。执行以下步骤:

  1. 启动 Internet Information Services Manager。
  2. 在 Connections 窗口中选择一个应用程序。
  3. 在 Actions 窗口中,单击 Basic Settings链接以打开 Edit Application 对话框,如图 1 所示。
  4. 注意选择的 Application Pool。

默认情况下,IIS 配置为支持两种应用程序池:DefaultAppPool和 Classic .NET AppPool。如果选择DefaultAppPool,则应用程序在集成请求处理模 式下运行。如果选择Classic .NET AppPool,则应用程序在经典请求处理模式下运行。

图 1:探测请求处理模式(单击查看大图

请注意,可以在 Edit Application 对话框中修改请求处理模式。单击 Select 按钮并更改与应用程序关联的应用程序池。需要注意的是在将 ASP.NET 应用程序从经典模式更改为集成模式时,存在兼容性问题。更多详细信息,请参阅以下文章:

如果 ASP.NET 应用程序使用DefaultAppPool,则不需要执行任何额外的步骤就可以让 URL 路由(即 ASP.NET MVC)正常工作。然而,如果将 ASP.NET 应用程序配置为使用 Classic .NET AppPool,则请继续阅读本教程,还有更多的工作要做。

在早期的 IIS 版本上使用 ASP.NET MVC

如果需要在早于 IIS 7.0 的 IIS 版本上使用 ASP.NET MVC,或者需要在经典模式下使用 IIS 7.0,则有两个选项可供选择。第一,修改路由表以使用文件扩展名。例如,不使用 URL /Store/Details,而是使用 URL /Store.aspx/Details。

第二个选项是创建通配符脚本映射。通配符脚本映射可以将每个请求映射到 ASP.NET Framework。

如果无权访问 Web 服务器(例如,ASP.NET MVC 应用程序由 Internet Service Provider 托管),则需要使用第一个选项。如果不想修改 URL 的内容,但有权访问 Web 服务器,则可以使用第二个选项。

我们将在下面的部分中详细讨论这两个选项。

将扩展名添加到路由表

让 URL 路由与早期的 IIS 版本协同工作的最简单的方法是修改Global.asax 文件中的路由表。程序清单 1 中的 Global.asax 文件配置了一个名称为 Default 的路由。

程序清单 1Global.asax(未修改)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing; namespace MvcAppCS
{
public class GlobalApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",// Route name
"{controller}/{action}/{id}",// URL with parameters
new { controller = "Home", action = "Index", id = "" }
// Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}

程序清单 1 中配置的 Default 路由允许按以下方式传送 URL:

/Home/Index

/Product/Details/3

/Product

不幸的是,早期的 IIS 版本不能将这些请求传递到 ASP.NET Framework。因此,这些请求不会传送到控制器。例如,如果从浏览器发出 URL /Home/Index 请求,则将得到如图 2 所示的错误页面。

图 2:收到 404 Not Found 错误(单击查看大图

IIS 的早期版本只将特定的请求映射到 ASP.NET Framework。请求必须是带有正确文件扩展名的 URL。例如,/SomePage.aspx 请求将映射到 ASP.NET Framework。/SomePage.htm 请求则无法映射。

因此,要让 URL 路由工作,我们必须修改 Default 路由,以使其包含能够映射到 ASP.NET Framework 的扩展名。能够映射到 ASP.NET 的文件扩展名有 .aspx, .axd, 和 .ashx 等。

程序清单 2 中修改的 Global.asax 文件可以与 IIS 的早期版本协同工作。

程序清单 2 Global.asax(使用扩展名修改后)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing; namespace MvcAppCS
{
public class GlobalApplication : 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
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}

重要事项:更改 Global.asax 文件后不要忘记再次生成 ASP.NET MVC 应用程序。

程序清单 2 中只有一处对 Global.asax 文件的细小但重要的更改。现在 Default 路由的 URL 模式如下所示:

{controller}.aspx/{action}/{id}

添加 .aspx 扩展名就是更改了 URL 路由模型解析的文件类型。通过这一更改,ASP.NET MVC 应用程序现在可以传送以下请求:

/Home.aspx/Index

/Product.aspx/Details/3

/Product.aspx

如此修改路由表后,需要确保应用程序中的所有链接与新的 URL 模式兼容。换言之,需要确保所有的链接包含 .aspx 扩展名。如果使用 Html.ActionLink() Helper 方法生成链接,则应该不需要任何更改。

创建通配符脚本映射

如果不想修改用于 ASP.NET MVC 应用程序的 URL 的内容,但有权访问 Web 服务器,则可以使用另一个选项。可以创建通配符映射,将所有请求映射到 ASP.NET Framework 的 Web 服务器。通过这种方法,可以在 IIS 7.0(经典模式)或 IIS 6.0 上使用默认的 ASP.NET MVC 路由表。

请注意,此选项将导致 IIS 解析每个向 Web 服务器发出的请求。这包括对图像、经典 ASP 页面和 HTML 页面的请求。因此,启用到 ASP.NET 的通配符脚本映射确实关系到性能问题。

以下是在 IIS 7.0 上启用通配符脚本映射的方法:

  1. 在 Connections 窗口中选择应用程序。
  2. 确保选中 Features 视图。
  3. 双击 Handler Mappings 按钮。
  4. 单击 Add Wildcard Script Map 链接,如图 3 所示。
  5. 输入到 aspnet_isapi.dll 文件的路径(可以从 PageHandlerFactory 脚本映射复制此路径)。
  6. 输入名称 MVC。
  7. 单击 OK 按钮。

图 3:使用 IIS 7.0 创建一个通配符脚本映射(单击查看大图

按以下步骤使用 IIS 6.0 创建通配符脚本映射:

  1. 右键单击网站并选择 Properties。
  2. 选择 Home Directory 选项卡。
  3. 单击 Configuration 按钮。
  4. 选择 Mappings 选项卡。
  5. 单击 Insert 按钮,如图 4 所示。
  6. 将 aspnet_isapi.dll 的路径粘贴到 Executable 字段(可以从 .aspx 文件的脚本映射复制此路径)。
  7. 取消选中 Verify that file exists复选框。
  8. 单击 OK 按钮。

图 4:使用 IIS 6.0 创建一个通配符脚本映射(单击查看大图

启用用于 IIS 7.0 或 IIS 6.0 的通配符脚本映射后,可以让请求与如下所示的默认路由表协同工作:

/Home/Index

/Product/Details/3

/Product

IIS5.1 也就是XP下的IIS,部署MVC

第一个要注意到地方是,ASP.NET MVC 默认情况下是没有把 System.Web.Abstractions.dll,System.Web.Routing.dll,System.Web.Mvc.dll 这三个程序集私有部署的,如果服务器上没有安装ASP.NET 3.5 SP1的话,请把这三个程序集采用私有部署,也就是跟网站程序一起部署在bin目录下。

第二个地方是,IIS5.1不能设置通配符,也不能像IIS7一样配置Handler,但是可以通过配置Routing 来实现把请求交给ASP.NET 的 ISAPI Filter来处理,比如在Global.asax.cs里可以这样配置:

Code Snippet

routes.MapRoute(
 "Default",
 "{controller}.aspx/{action}/{id}",
 new { controller = "Home", action = "Index", id = ""}
);

总结

本教程的目的是解释如何在使用早期版本的 IIS(或经典模式的 IIS 7.0)的同时使用 ASP.NET MVC。我们讨论了让 URL 路由与早期版本的 IIS 协同工作的两种方法:修改默认的路由表或创建通配符脚本映射。

第一种方法要求修改 ASP.NET MVC 应用程序中使用的 URL。此方法的优势在于不需要访问 Web 服务器就可以修改路由表。这意味着由 Internet 代理公司代理 ASP.NET MVC 应用程序时可以使用此方法。

第二种方法是创建通配符脚本映射。此方法的优势在于不需要修改 URL。第二种方法的不利之处在于它可能影响 ASP.NET MVC 应用程序的性能

在不同版本的 IIS 上使用 ASP.NET MVC的更多相关文章

  1. 不同版本的 IIS 中使用 ASP.NET MVC(C#)【转】

    由微软 ASP.NET 团队|2008 年 8 月 19 日 推特 在本教程中,您将学习在不同版本的 Internet Information Services 中如何使用 ASP.NET MVC 和 ...

  2. IIS中使用ASP.NET MVC的经验总结

    在这篇文章中我们学习在不同版本的IIS中使用ASP.NET MVC和URL Routing.我们学习针对IIS7.0.IIS6.0和更早版本的IIS的处理策略. ASP.NET MVC框架依赖于URL ...

  3. ASP.NET Core 2.2 和之前版本区别: 可以在IIS上进行ASP.NET核心进程托管 (翻译)

    原文链接: https://weblog.west-wind.com/posts/2019/Mar/16/ASPNET-Core-Hosting-on-IIS-with-ASPNET-Core-22 ...

  4. .NET开发框架(五)-IIS上部署ASP.NET Core项目教程

    系列教程:从初学者到架构师的一步步蜕变 本篇经验将和大家介绍如何在IIS上部署ASP.NET Core项目,希望对初学.NET CORE的童靴入门有所帮助! 1.打开VS,创建项目,选择ASP.NET ...

  5. Visual Studio 调试系列12 远程调试部署在远程计算机IIS上的ASP.NET应用程序

    系列目录     [已更新最新开发文章,点击查看详细] 要调试已部署到IIS的ASP.NET应用程序,请在部署应用程序的计算机上安装并运行远程工具,然后从Visual Studio附加到正在运行的应用 ...

  6. Web Server 在IIS上部署ASP.NET Core项目

    在IIS上部署ASP.NET Core项目 一.配置应用程序池为无托管: 二.安装ASPNETCoreModule:(核心) 下载地址:https://go.microsoft.com/fwlink/ ...

  7. Mono 4.0 Mac上运行asp.net mvc 5.2.3

    Mono 4.0 已经发布,二进制包已经准备好,具体的发布说明参见:http://www.mono-project.com/docs/about-mono/releases/4.0.0/. 今天在Ma ...

  8. 在Windows Azure上创建ASP.NET MVC网站

    本篇体验在Windows Azure上创建ASP.NET MVC网站. →登录到Windows Azure管理门户 →点击左下方的"新建" →点击"自定义创建" ...

  9. 在IIs上部署asp.net core2.1项目

    转自:https://www.cnblogs.com/jasonduan/p/9193702.html 在IIS上部署你的ASP.NET Core 2.1项目   1.在控制面板→程序→启用或关闭Wi ...

随机推荐

  1. 射频识别技术漫谈(6)——通讯协议概述【worldsing笔记】

    通讯协议是通讯的双方或多方在交流时遵守的规矩,包括谁先发起通讯,先交流什么,后交流什么,一方如何问,另一方如何答等.在这里通迅的双方指的是读写器和卡片. 首先是谁先发起通讯,很显然有两种,读写器先发言 ...

  2. 高级C++开发工程师综合测试题(风林火山)

    题目要求:代码要求能够直接编译运行 1.       请实现一个函数:凑14:输入很多个整数(1<=数值<=13),任意两个数相加等于14就可以从数组中删除这两个数,求剩余数(按由小到大排 ...

  3. web开发工具类

    1.日期工具类 import java.text.SimpleDateFormat; import java.util.Date; public class DateUtil { public sta ...

  4. SQLite使用教程7 删除表

    http://www.runoob.com/sqlite/sqlite-drop-table.html SQLite 删除表 SQLite 的 DROP TABLE 语句用来删除表定义及其所有相关数据 ...

  5. Asp.net 用 Graphics 统计图(柱状图, 折线图, 扇形图)

    统计图形种类繁多, 有柱状图, 折线图, 扇形图等等, 而统计图形的绘制方法也有很多, 有Flash制作的统计图形, 有水晶报表生成统计图形, 有专门制图软件制作, 也有编程语言自己制作的:这里我们用 ...

  6. Java安全之对称加密、非对称加密、数字签名

    原文地址: http://blog.csdn.net/furongkang/article/details/6882039 Java中加密分为两种方式一个是对称加密,另一个是非对称加密.对称加密是因为 ...

  7. Access-数据类型与.net OleDbType枚举类型对应关系

    列表最常见的数据类型映射 访问类型名称 数据库数据类型 OLEDB 类型 .NET 框架类型 成员名称 文本 VarWChar DBTYPE _ WSTR System.String OleDbTyp ...

  8. hdu 5464 Clarke and problem dp

    Clarke and problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php ...

  9. android126 zhihuibeijing 极光推送

    https://www.jpush.cn/ 张三把消息发送给自己的服务器,自己的服务器将消息发送给极光推送,然后极光推送将消息发送给妹子. 清单文件: <?xml version="1 ...

  10. 未打开Ad Hoc Distributed Queries

    SSAS访问ORACLE数据仓库读取数据创建CUBE的时候报如下错误: SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'Open ...