zoukankan      html  css  js  c++  java
  • MVC为什么不再需要注册通配符(*.*)了?

    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。

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

    1. EnableExtensionlessUrls没定义或者是设置值为1。
    2. v4.0 aspnet_filter.dll正常注册到到IIS上作为ISPAI筛选器。
    3. v4.0 aspnet_isapi.dll处理.axd扩展名的请求,也就是.axd映射到 aspnet_ISPAI.dll上。
    4. v4.0 aspnet_isapi.dll在ISPAI限制列表里设置为允许Allowed。
    5. 网站设置为可读,并且有脚本权限。

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

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

    参考资料:

    http://haacked.com/archive/2010/12/22/asp-net-mvc-3-extensionless-urls-on-iis-6.aspx

    http://blogs.msdn.com/b/tmarq/archive/2010/06/18/how-to-disable-the-asp-net-v4-0-extensionless-url-feature-on-iis-6-0.aspx

    http://blogs.msdn.com/b/tmarq/archive/2010/05/26/how-extensionless-urls-are-handled-by-asp-net-v4.aspx

    同步与推荐

    本文已同步至目录索引:MVC之前的那点事儿系列

    MVC之前的那点事儿系列文章暂时结束,关于MVC正式的部分,希望有时间陆续贴上来。

  • 相关阅读:
    zzulioj--1716--毒(模拟水题)
    zzulioj--1715--土豪银行(贪心)
    35.Java中mian方法详解
    34.Java内存布局以及java各种存储区【详解】
    33.Java中static关键字
    32.java的this关键字
    31.Java构造方法
    30.Java对象的特证之一-封装
    29.Java匿名对象
    28.Java局部变量和成员变量
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3781322.html
Copyright © 2011-2022 走看看