web.config中的ExtensionlessUrlHandler-Integrated-4.0


對於像MVC這種比較特殊的URL,例如

www.store.com/books/GetById/2

因為沒有文件后綴名,IIS通常會無法解析,返回403或者404錯誤。ASP.NET v4.0增加了新的特性,當運行在IIS7以上版本,並且需要IIS的一個快速修復程序KB980368,配置web.config后,將會正常處理上面這種 extensionless URL,

在IIS經典模式下,用的是aspnet_isapi.dll(IIS的native handler擴展),通過映射到System.Web.DefaultHttpHandler進行處理,

<system.webServer>
    <handlers>
<add
  name="ExtensionlessUrl-ISAPI-4.0_32bit"
  path="*."
  verb="GET,HEAD,POST,DEBUG"
  modules="IsapiModule"
  scriptProcessor="%WINDIR%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll"
  preCondition="classicMode,runtimeVersionv4.0,bitness32" 
  responseBufferLimit="0" />
</handlers>
  </system.webServer>

在集成模式下,會映射到System.Web.Handlers.TransferRequestHandle來處理

<system.webServer>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>

 另外就是runAllManagedModulesForAllRequests設置。

<modules runAllManagedModulesForAllRequests="false" />

這里當設置為true的時候是,所有的請求,包含靜態文件的請求和沒有文件擴展名的請求,都會經過自定義的HttpModule。

參考文章http://www.hanselman.com/blog/BackToBasicsDynamicImageGenerationASPNETControllersRoutingIHttpHandlersAndRunAllManagedModulesForAllRequests.aspx

https://blogs.msdn.microsoft.com/tmarq/2010/05/26/how-extensionless-urls-are-handled-by-asp-net-v4/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM