不同版本的 IIS 中使用 ASP.NET MVC(C#)【转】
在本教程中,您将学习在不同版本的 Internet Information Services 中如何使用 ASP.NET MVC 和 URL 路由。您将了解与 IIS 7.0 (经典模式)、 IIS 6.0 和早期版本的 IIS 使用 ASP.NET MVC 的不同策略。
ASP.NET MVC 框架取决于 ASP.NET 路由将浏览器请求路由到控制器操作。要充分利用 ASP.NET 路由,您可能必须在您的 web 服务器上执行额外的配置步骤。这一切取决于 Internet 信息服务 (IIS) 和请求处理模式为您的应用程序的版本。
这里是不同版本的 IIS 的摘要:
- IIS 7.0 (综合模式)-不使用 ASP.NET 路由所需的特殊配置。
- IIS 7.0 (经典模式)-你需要执行特殊的配置为使用 ASP.NET 路由。
- IIS 6.0 或以下-您需要执行特殊的配置为使用 ASP.NET 路由。
IIS 的最新版本是 7.5 版本(在 Win7 上)。IIS IIS 7 是包括与 Windows 服务器 2008年和 VISTA/SP1 和更高。您还可以在任何版本的 Vista 操作系统除了首页基本安装 IIS 7.0 (见http://technet.microsoft.com/en-us/library/cc731179%28WS.10%29.aspx).
IIS 7.0 支持两种模式用于处理请求。您可以使用集成的模式或经典模式。您不需要执行任何特殊的配置步骤,使用 IIS 7.0 在集成模式下时。然而,你需要执行额外的配置,在经典模式中使用 IIS 7.0 时。
微软 Windows Server 2003 包括 IIS 6.0。使用 Windows Server 2003 操作系统时,不能将 IIS 6.0 升级到 IIS 7.0。使用 IIS 6.0 时,您必须执行额外的配置步骤。
微软 Windows XP 专业版包括 IIS 5.1。使用 IIS 5.1 时,您必须执行额外的配置步骤。
最后,微软 Windows 2000 和 Microsoft Windows 2000 专业版包括 IIS 5.0。使用 IIS 5.0 时,您必须执行额外的配置步骤。
集成与经典模式
IIS 7.0 可以处理请求使用两种不同的请求处理模式: 集成和经典。集成模式下提供了更好的性能和更多的功能。经典模式,倒会包含与早期版本的 IIS 的兼容性。
请求处理模式取决于应用程序池。您可以确定哪些处理模式通过确定与应用程序关联的应用程序池使用由一个特定的 web 应用程序。请按照下列步骤操作:
- 推出的互联网信息服务管理器
- 在连接窗口中,选择应用程序
- 在操作窗口中,单击基本设置链接,打开编辑应用程序对话框 (见图 1)
- 注意到所选的应用程序池。
默认情况下,IIS 已配置为支持两个应用程序池:DefaultAppPool 和 Classic .NET AppPool。如果选择了默认应用程序池,然后您的应用程序正在运行集成的请求处理模式。如果选择了经典.NET 池,则您的应用程序经典的请求处理模式下运行。
图 1: 检测(点击查看完全尺寸的图像)的请求处理模式
请注意您可以修改在编辑应用程序对话框内的请求处理模式。单击选择按钮并更改与该应用程序关联的应用程序池。意识到是从经典到集成模式更改 ASP.NET 应用程序时,兼容性问题。有关详细信息,请参阅以下文章:
- 升级到 IIS 7.0 上 Windows Vista 和 Windows Server 2008 年 — — http://learn.iis.net/page.aspx/270/upgrading-aspnet-11-to-iis7-on-windows-vista--windows-server-2008/ASP.NET 1.1
- 与 IIS 7.0- http://learn.iis.net/page.aspx/243/aspnet-integration-with-iis7/ASP.NET 集成
如果 ASP.NET 应用程序使用的默认应用程序池,您不需要执行任何额外的步骤来获取 ASP.NET 路由 (和因此 ASP.NET MVC) 工作。然而,如果 ASP.NET 应用程序配置为使用经典.NET 池,然后继续读下去,你会有更多的工作要做。
与旧版本的 IIS 使用 ASP.NET MVC
如果您需要使用 ASP.NET MVC 与早期版本的 IIS 比 IIS 7.0,或您需要使用经典模式下的 IIS 7.0,然后你就有两个选项。第一,您可以修改要使用的文件扩展名的路由表。例如,而不是要求像 /Store/Details 的 URL,你会请求像 /Store.aspx/Details 的 URL。
第二个选项是创建叫做通配符脚本映射。通配符脚本映射使您能够将每个请求映射到 ASP.NET 框架。
如果您没有权限访问到您的 web 服务器 (例如,应用程序由互联网服务提供商正在主办您 ASP.NET MVC) 你会需要使用第一种选择。如果你不想修改您的 Url 的外观,并且您可以访问您的 web 服务器,然后您可以使用第二个选项。
我们探讨在以下各节中详细的每个选项。
向路由表添加扩展名
获取 ASP.NET 路由工作与较早版本的 IIS 的最简单方法是修改您在 Global.asax 文件中的路由表。默认情况下,并在清单 1 中的未修改的 Global.asax 文件配置一条路线命名的默认路由。
清单 1-Global.asax (未修改)
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.Mvc;usingSystem.Web.Routing;namespaceMvcApplication1{publicclassGlobalApplication:System.Web.HttpApplication{publicstaticvoidRegisterRoutes(RouteCollection routes){
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute("Default",// Route name"{controller}/{action}/{id}",// URL with parametersnew{ controller ="Home", action ="Index", id =""}// Parameter defaults);}protectedvoidApplication_Start(){RegisterRoutes(RouteTable.Routes);}}}
配置清单 1 中的默认路由允许您对路由 Url,看起来像这样:
/ 首页/索引
/ 产品/详细信息/3
/ 产品
不幸的是,旧版本的 IIS 不会将这些请求传递给 ASP.NET 框架。因此,不会让这些请求路由到一个控制器。例如,如果你让浏览器请求的 URL /Home 索引然后就会在图 2 中得到的错误页。
图 2: 收到 404 未找到错误(点击查看完全尺寸的图像)
较早版本的 IIS 只将某些请求映射到 ASP.NET 框架。请求必须具有正确的文件扩展名的 URL。例如,/SomePage.aspx 的请求获取映射到 ASP.NET 框架。但是,/SomePage.htm 的请求并不。
因此,要获取 ASP.NET 路由工作,我们必须修改的默认路由,它包括文件扩展名映射到 ASP.NET 框架。
这是使用脚本命名为registermvc.wsf
。它是包含在 ASP.NET MVC 1 发布在C:\Program Files\Microsoft ASP.NET\ASP.NET MVC\Scripts
,但到 ASP.NET 2 此脚本已被移动到 ASP.NET 期货,可在http://aspnet.codeplex.com/releases/view/39978.
执行此脚本将 IIS 注册新的.mvc 扩展名。你注册.mvc 扩展后,你可以修改您的航线 Global.asax 文件中,以便路线使用.mvc 扩展名。
清单 2 中修改的 Global.asax 文件工作与较早版本的 IIS。
清单 2-Global.asax (具有扩展名修改)
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.Mvc;usingSystem.Web.Routing;namespaceMvcApplication1{publicclassMvcApplication:System.Web.HttpApplication{publicstaticvoidRegisterRoutes(RouteCollection routes){
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute("Default","{controller}.mvc/{action}/{id}",new{ action ="Index", id =""}); routes.MapRoute("Root","",new{ controller ="Home", action ="Index", id =""});}protectedvoidApplication_Start(){RegisterRoutes(RouteTable.Routes);}}}
重要提示: 记住要更改 Global.asax 文件后再生成您的 ASP.NET MVC 应用程序。
有到 Global.asax 文件清单 2 中的两个重要变化。现在有两条路线在 Global.asax 中定义。默认路由,第一个路由的 URL 模式现在看起来像:
{} controller}.mvc/{action}/{id
.Mvc 扩展的另外更改 ASP.NET 路由模块截获的文件的类型。由于此更改,现在是 ASP.NET MVC 应用程序中路线类似于以下内容的请求:
/Home.mvc/Index/
/Product.mvc/Details/3
/Product.mvc/
第二条路线,根路线,是新的。这根路由的 URL 模式是一个空字符串。这条路线是必要的匹配对您的应用程序的根所提出的请求。例如,根路线将匹配请求,看起来像这样:
http://www.YourApplication.com/
到路由表中,这些修改后,您需要确保您的应用程序中的链接的所有兼容与这些新的 URL 模式。换句话说,请确保您的所有链接包括.mvc 扩展名。如果您使用 Html.ActionLink() 帮助器方法来生成您的链接,然后您应该不需要进行任何更改。
而不是使用 registermvc.wcf 脚本,可以将新扩展名添加到 IIS 映射到 ASP.NET 框架用手。当添加一个新的扩展自己,以确保不检查标记为确认文件存在复选框。
托管的服务器
你总是没有访问您的 web 服务器。例如,如果承载您 ASP.NET MVC 应用程序中使用互联网托管提供程序,然后你就不一定有访问 IIS。
在这种情况下,您应该使用现有的文件扩展名映射到 ASP.NET 框架之一。文件扩展名映射到 ASP.NET 的例子包括.aspx、.axd 和.ashx 扩展。
例如,清单 3 中修改的 Global.asax 文件而不是.mvc 扩展使用.aspx 扩展名。
清单 3-Global.asax (.aspx 扩展名修改)
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.Mvc;usingSystem.Web.Routing;namespaceMvcApplication1{publicclassMvcApplication:System.Web.HttpApplication{publicstaticvoidRegisterRoutes(RouteCollection routes){
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute("Default","{controller}.aspx/{action}/{id}",new{ action ="Index", id =""}); routes.MapRoute("Root","",new{ controller ="Home", action ="Index", id =""});}protectedvoidApplication_Start(){RegisterRoutes(RouteTable.Routes);}}}
Global.asax 文件清单 3 中的确切地是它而不是.mvc 扩展使用.aspx 扩展名的事实以前的 Global.asax 文件相同。你不需要执行任何安装程序在您要使用.aspx 扩展名的远程 web 服务器上。
创建的通配符脚本映射
如果你不想要修改您的 ASP.NET MVC 应用程序的 Url,并且您可以访问您的 web 服务器,然后你就有一个额外的选择。您可以创建将所有请求都映射到 ASP.NET 框架对 web 服务器的通配符脚本映射。这种方式,你可以使用默认的 ASP.NET MVC 路由表 (在经典模式下) IIS 7.0 或 IIS 6.0。
请注意此选项会导致 IIS 以截获对 web 服务器所作的每个请求。这包括图像、 经典的 ASP 页和 HTML 页面的请求。因此,启用通配符脚本映射到 ASP.NET 不会有性能的影响。
这里是如何为 IIS 7.0 启用通配符脚本映射:
- 在连接窗口中选择您的应用程序
- 请确保在功能视图选择
- 双击处理程序映射按钮
- 单击添加通配符脚本映射链接 (见图 3)
- (您可以从 PageHandlerFactory 的脚本映射复制此路径) 的 aspnet_isapi.dll 文件输入的路径
- 输入的名称 MVC
- 单击确定按钮
图 3: 使用 IIS 7.0(单击查看完全尺寸的图像)创建的通配符脚本映射
请按照这些步骤使用 IIS 6.0 创建的通配符脚本映射:
- 右键单击网站,然后选择属性
- 选择主目录选项卡
- 单击配置按钮
- 选择映射选项卡
- 单击插入按钮 (见图 4)
- Aspnet_isapi.dll 的路径粘贴到可执行文件的字段,(你可以从.aspx 文件的脚本映射复制此路径)
- 取消选中的复选框,标记为确认文件存在
- 单击确定按钮
图 4: 使用 IIS 6.0(点击查看完全尺寸的图像)创建的通配符脚本映射
您启用通配符脚本映射后,您需要修改 Global.asax 文件中的路由表,使它包括一条根的路线。否则,就会在图 5 中获取的错误页面,当您为您的应用程序的根页的请求时。您可以使用清单 4 中修改的 Global.asax 文件。
图 5: 缺少根路线错误(点击查看完全尺寸的图像)
清单 4-Global.asax (与根路线修改)
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.Mvc;usingSystem.Web.Routing;namespaceMvcApplication1{publicclassMvcApplication:System.Web.HttpApplication{publicstaticvoidRegisterRoutes(RouteCollection routes){
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute("Default","{controller}/{action}/{id}",new{ action ="Index", id =""}); routes.MapRoute("Root","",new{ controller ="Home", action ="Index", id =""});}protectedvoidApplication_Start(){RegisterRoutes(RouteTable.Routes);}}}
您启用通配符脚本映射,IIS 7.0 或 IIS 6.0 之后,您可以使用默认的路由表看起来像这样的请求:
/
/ 首页/索引
/ 产品/详细信息/3
/ 产品
摘要
本教程的目标是解释如何时,可以使用 ASP.NET MVC 中使用较早版本的 IIS (或在经典模式下的 IIS 7.0)。我们讨论了获取 ASP.NET 路由工作与较早版本的 IIS 的两个方法: 修改默认的路由表或创建的通配符脚本映射。
第一个选项要求您修改您的 ASP.NET MVC 应用程序中使用的 Url。此首选项的一个非常显著的优势是不需要访问 web 服务器的权限才能修改路由表。这意味着您可以使用此首选项,与互联网承载您的 ASP.NET MVC 应用程序时,即使托管公司。
第二个选项是创建一个通配符脚本映射。此第二个选项的好处是你不需要修改您的 Url。这第二个选项的缺点是它可以影响 ASP.NET MVC 应用程序的性能。
// 注意: 有关启用 IIS6 或 IIS7 经典模式的说明,
// 请访问 http://go.microsoft.com/?LinkId=9394801
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Main", id = UrlParameter.Optional } // 参数默认值
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
string configPath = ConfigurationManager.AppSettings["SOAInterfaceConfig"];
TongCheng.SOA.Core.Config.SOAConfigurator.Configurate(new System.IO.FileInfo(Server.MapPath(configPath)));
#region 自动运行程序自启动心跳
AutoRunMonitorHelper arMonitor = new AutoRunMonitorHelper();
arMonitor.StartMonitor();
#endregion
}
protected void Application_Error()
{
Exception ex = Server.GetLastError();
}
不同版本的 IIS 中使用 ASP.NET MVC(C#)【转】的更多相关文章
- IIS中使用ASP.NET MVC的经验总结
在这篇文章中我们学习在不同版本的IIS中使用ASP.NET MVC和URL Routing.我们学习针对IIS7.0.IIS6.0和更早版本的IIS的处理策略. ASP.NET MVC框架依赖于URL ...
- 在不同版本的 IIS 上使用 ASP.NET MVC
ASP.NET MVC Framework 依赖于 URL 路由.为了利用 URL 路由,可能不得不在 Web 服务器上执行额外的配置步骤.这些步骤取决于 Internet Information S ...
- 在IIS中部署Asp.net Mvc
概述: 最近在做一个MVC 3的项目,在部署服务器时破费了一番功夫,特将过程整理下来,希望可以帮到大家! 本文主要介绍在IIS5.1.IIS6.0.IIS7.5中安装配置MVC 3的具体办法! 正文: ...
- 在IIS中部署Asp.Net网站
在IIS中部署Asp.Net网站 1.添加IIS或者删除IIS,在控制面板=>程序和功能=>打开或关闭功能 启动iis,右键计算机=>管理=>服务和应用程序=>Inter ...
- 【续集】在 IIS 中部署 ASP.NET 5 应用程序遭遇的问题
dudu 的一篇博文:在 IIS 中部署 ASP.NET 5 应用程序遭遇的问题 针对 IIS 部署 ASP.NET 5 应用程序的问题,在上面博文中主要采用两种方式尝试: VS2015 的 Publ ...
- [Asp.Net Core] 1. IIS中的 Asp.Net Core 和 dotnet watch
在基于传统的.NET Framework的Asp.Net Mvc的时候,本地开发环境中可以在IIS中建立一个站点,可以直接把站点的目录指向asp.net mvc的项目的根目录.然后build一下就可以 ...
- IIS中的 Asp.Net Core 和 dotnet watch
在基于传统的.NET Framework的Asp.Net Mvc的时候,本地开发环境中可以在IIS中建立一个站点,可以直接把站点的目录指向asp.net mvc的项目的根目录.然后build一下就可以 ...
- VS2017中建立ASP.NET MVC 4.0项目
新的项目需要运行在WIN2003上,又不想用ASPX了,只好用回ASP.NET MVC4.0了,可是在VS2017中已经没有MVC4的模板了,网上下载的安装了也没有,只好把以前的MVC4的项目拿 出来 ...
- 在IIS中部署ASP.NET 5应用程序遭遇的问题
用VS2015中创建了一个非常简单的ASP.NET5程序: 在Startup.cs中只输入一行代码: using System; using Microsoft.AspNet.Builder; usi ...
随机推荐
- PM产品经理练级攻略(1-5等级)
大家都叫“PM”,但做的事情却完全不同? “PM”这个词到底是什么意思? 这个话题恐怕也是各位同行都一直在想,也一直想不清楚的吧,我也是. 每次看到各种“产品经理的能力模型”,我都觉得有点扯淡,总觉得 ...
- codevs1040 统计单词个数
题目描述 Description 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<= ...
- linux ar 命令的使用
摘自http://blog.csdn.net/hxg130435477/article/details/8217247 用途说明 创建静态库.a文件.用C/C++开发程序时经常用到,但我很少单独在命令 ...
- 1 & 167. Two Sum I & II ( Input array is sorted )
Input array is sorted: Use binary search or two pointers Unsorted: Use hash map, key = target - a[i] ...
- hdu 1010 Tempter of the Bone(dfs暴力)
Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. However, ...
- 九度OJ 题目1371:最小的K个数
题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 输入: 每个测试案例包括2行: 第一行为2个整数n,k(1< ...
- 单调旋转数组的TopK问题
问题描述:输入一个单调旋转后的数组,求该数组中的第k小的元素. 分析:很多人看到这个题目会有点懵,可能读者不知道什么是旋转数组,我先解释下两个概念, 旋转数组的定义:把一个数组的前几项元素移动到数组的 ...
- ADO.Net两种访问数据库模式
在连接模式下的数据库访问通常包括以下几个步骤: 1.通过数据库连接类(DbConnection)链接类指定到数据库服务器的数据库 2.通过数据库命令类(DbCommand)在数据库上执行SQL命令,可 ...
- SQL Server 2012 Enterprise Edition安装过程详解(包含每一步设置的含义)
一.启动安装程序,点击“安装”选项卡,选择“全新SQL Server独立安装或向现有安装添加功能”.(首次安装数据库系统或向现有数据库系统添加功能,均选择此选项) 二.随后,安装程序进行“安装程序支持 ...
- 设计模式之观察者模式(Java)
设计模式(Design pattern)是什么?它是一套由四人组(The Gang of Four, [1]的作者)总结出来的软件设计框架.其目的是为了提高代码的可重用性,增强系统的可维护性和代码的易 ...