MVC系列(10) MVC为什么不再需要注册通配符(*.*)了

很多教程里都提到了,在部署MVC程序的时候要配置通配符映射(或者是*.mvc)到aspnet_ISPAI.dll上,在.NET4.0之前确实应该这么多,但是.NET4.0之后已经不要再费事了,因为它默认就支持了。

你可以会问,没有映射配置,请求这么可能会走到aspnet_ISPAI.dll上呢?对,这就是我们本章节要讲的一个东西:ASP.NET 4 Extensionless URL feature,因为在ASP.NET4之后,默认所有的请求都转向到aspnet_ISPAI.dll,那么在IIS6上它是如何实现的呢?首先 ASP.NET4.0安装的时候会自动安装一个aspnet_filter.dll ,这是一个ISAPI筛选器,该筛选器在请求处理之前,会将所有的URL地址附加上/eurl.axd/GUID字符串,而默认情况下*.axd扩展名是映射到aspnet_isapi.dll上的,所以当我们附加/eurl.axd/GUID字符串以后,所有的请求都可以被aspnet_isapi.dll来处理了,当进入ASP.NET的时候的时候又把该/eurl.axd/GUID 字符串删除了(这个周期非常早),以便还原成原来的URL地址。.NET框架根目录下的web.config默认设置请求是 DefaultHttpHandler来处理的,因为它的path=”*”,并且放在httpHandlers的第一个位置上(除非你修改了设置),此后 DefaultHttpHandler将这个请求转发(不是URL跳转哦)至IIS上,这时候我们的筛选器不会再附加/eurl.axd/GUID字符串了,接下来就是正常的处理请求了,如果你想利用此特性做其它特殊的事情,那你需要在MapRequestHandler事件执行之前,修改DefaultHttpHandler为其它的HttpHandler。

有一点需要注意的是,IIS7集成模式下,处理请求的默认Handler是不是DefaultHttpHandler而是 TransferRequestHandler,两个Hanlder是差不多的,具体的细节不同不在我们讨论的范畴,我们就不多说了,这些handler 默认是随.NET4.0安装的时候一起安装,但是IIS7默认是不启用这个功能的,只有在安装了IIS7的QFE才能使用,QFE包含在service pack中,QFE独立下载地址为http://support.microsoft.com/kb/980368。

本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/aspx/

另外,要保持这个功能正常使用的话,下列设置需要满足条件:

EnableExtensionlessUrls没定义或者是设置值为1。

v4.0 aspnet_filter.dll正常注册到到IIS上作为ISPAI筛选器。

v4.0 aspnet_isapi.dll处理.axd扩展名的请求,也就是.axd映射到 aspnet_ISPAI.dll上。

v4.0 aspnet_isapi.dll在ISPAI限制列表里设置为允许Allowed。

网站设置为可读,并且有脚本权限。

在IIS6上要想禁用这个功能,修改注册表文件HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\4.0.30319.0\EnableExtensionlessUrls为0就可以实现,因为IIS只有重启的时候才加载这个配置,所以需要重启一下才能生效。Wow64下(比如64为OS下允许32位worker process)则需要设置HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\4.0.30319.0\EnableExtensionlessUrls为0.

IIS 6, ASP.NET 4, 和ASP.NET MVC 3可以成功使用上述功能(甚至MVC2也可以,MVC1未测试),所以,以后在ASP.NET4.0上部署站点的时候,不必再设置通配符映射就可以使用MVC3功能了。

cnblogs 汤姆大叔

时间: 2024-10-19 16:30:51

MVC系列(10) MVC为什么不再需要注册通配符(*.*)了的相关文章

MVC系列(8) UrlRouting的理解

根据对Http Runtime和Http Pipeline的分析,我们知道一个ASP.NET应用程序可以有多个HttpModuel,但是只能有一个HttpHandler,并且通过这个 HttpHandler的BeginProcessRequest(或ProcessRequest)来处理并返回请求,前面的章节将到了再 MapHttpHandler这个周期将会根据请求的URL来查询对应的HttpHandler,那么它是如何查找的呢? 一起我们在做自定义HttpHandler的时候,需要执行URL以及

学习ASP.NET MVC系列 - 还有比这更简炼的吗?把复杂的事情变简单了,贡献啊!

转自   学习ASP.NET MVC系列: 学习ASP.NET MVC(一)--我的第一个ASP.NET MVC应用程序 学习ASP.NET MVC(二)--我的第一个ASP.NET MVC 控制器 学习ASP.NET MVC(三)--我的第一个ASP.NET MVC 视图 学习ASP.NET MVC(四)--我的第一个ASP.NET MVC 实体对象 学习ASP.NET MVC(五)--我的第一个ASP.NET MVC CURD页面 学习ASP.NET MVC(六)--我的第一个ASP.NET

爱上MVC系列~目录

MVC3配合Razor视图引擎使得我们在开发项目中更加快捷,以下是我在项目开发过程中整理的一些笔记,和大家一起分享一下 爱上MVC系列~目录 爱上MVC~Razor引擎时,在遍历中巧用Output.Write方法 爱上MVC~开发Areas模块时需要注意一下路由问题 爱上MVC~实体级标准验证 爱上MVC系列~PartialView()与View()真的一样吗? 爱上MVC系列~手动向路由表扔数据,不影响当前URL路由配对 爱上MVC系列~使用Func<string, HelperResult>

wcf-WCF寄宿在MVC,将MVC发布在IIS上WCF不能访问,求帮忙……

问题描述 WCF寄宿在MVC,将MVC发布在IIS上WCF不能访问,求帮忙-- 我在同一个解决方案下建立一个WCF服务库,一个MVC项目, WCF寄宿在MVC,将MVC发布在IIS上WCF不能访问,为何? 如果直接运行MVC可以访问到WCF,但是发布在IIS上出现404.3错误 如图1:项目 图2:错误 求帮忙,怎么才能解决? 解决方案 WCF本身支持分布式,一定这样吗?可以有两个解决方案!除此之外,可能你的IIS配置有问题!

IDC评述网:10月下旬国内域名注册商净增量Top10

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 IDC评述网(idcps.com)11月20日报道:根据WebHosting.info数据,IDC评述网整理发布了<2013年10月下旬中国域名注册商报告>.据报告显示,截至2013年10月28日,在国内域名注册商市场上,中国万网以域名持有量1,410,846个高居榜首.且在10月下旬域名净增长量统计上,万网再居榜首,成为真正的双

英特尔推出新至强(Xeon)E7系列10核心处理器

据国外http://www.aliyun.com/zixun/aggregation/31646.html">媒体报道,英特尔周二推出新至强(Xeon) E7系列10核心处理器.该公司表示,该系列处理器有助于减少功耗,降低数据中心的维护成本,还将提高处理性能.Xeon E7面向运行数据密集型应用的高端服务器,如数据库和企业资源规划应用.该系列处理器采用32nm工艺,基于Westmere微处理器架构. 至强E7服务器能够运行高端企业级应用,包括数据库和科学应用程序.这些服务器速度更快,提供多

MVC系列(6) 动态注册HttpModule

通过前面的章节,我们知道HttpApplication在初始化的时候会初始化所有配置文件里注册的HttpModules,那么有一个疑问,能否初始化之前动态加载HttpModule,而不是只从Web.config里读取? 答案是肯定的, ASP.NET MVC3发布的时候提供了一个Microsoft.Web.Infrastructure.dll文件,这个文件就是提供了动态注册HttpModule的功能,那么它是如何以注册的呢?我们先去MVC3的源码看看该DLL的源代码. 注:该DLL位置在C:\P

MVC系列(9) MVC如何在Pipeline中接管请求的

上个章节我们讲到了,可以在HttpModules初始化之前动态添加Route的方式来自定义自己的HttpHandler,最终接管请求的,那MVC是这么实现的么?本章节我们就来分析一下相关的MVC源码来验证一下我们的这个问题. 先创建一个MVC3的Web Application,选择默认的模板以便创建以后就默认包含HomeController和AccountController.我们知道MVC要先接管请求才能通过这些Controller来处理,那我们先去Global.asax.cs文件里看代码(定

MVC系列(7) WebActivator的实现原理详解

上篇文章,我们分析如何动态注册HttpModule的实现,本篇我们来分析一下通过上篇代码原理实现的WebActivator类库,WebActivator提供了3种功能,允许我们分别在HttpApplication初始化之前,之后以及ShutDown的时候分别执行指定的代码,示例如下: [assembly: WebActivator.PreApplicationStartMethod(typeof(A.InitClass1), "PreStart")] [assembly: WebAct