注册自定义HTTP Handlers
項目用到了highcharts.js來繪圖,想本地導出,于是在github找到了這個項目ASP.NET Highcharts export module,當然,我說的是很久以前了,還在做MVC3項目的時候,當時一切順利,把幾個dll導入,修改web.config文件以支持自定義的http handler(以HighchartsExport.axd訪問),并且立即導出成功。
這一次再次用到了highcharts,同樣需要導出,結果卻死導不出,總是報404錯誤,不過就是mvc4+NF4.5而已。上述項目提供了兩個web.config的示例文件,我一一測試,均失敗,官方要求的是在web.config的system.web節點中注冊如下節點:
<httpHandlers><add verb="POST"path="HighchartsExport.axd"type="Tek4.Highcharts.Exporting.HttpHandler, Tek4.Highcharts.Exporting"/> </httpHandlers>干脆查了一下文檔,注冊自定義http handler的方式,果然與該項目作者介紹的不一樣,修改后成功,只是同樣的iis環境下,老mvc3項目成功,示例的asp.net網站也成功,這就百撕不得騎姐了。
官方文檔鏈接
其并不是給了一個萬應良藥,只是分三種情況(應該是六種情況,分別對應了獨立dll和寫到app_code里面兩大類,區別就在于app_code里面的類在注冊的時候不需要寫命名空間,此處不介紹,直接看文檔吧):IIS6.0,IIS7.0經典模式,以及IIS7.0集成模式
IIS6下,照著上述代碼配置即可。
IIS7的經典模式下,同樣需要照著上述代碼配置,但是還不夠,需要繼續在configuration的根節點下配置system.webServer節點:
<system.webServer> <add name=SampleHandler" verb="*" path="SampleHandler.new" Modules="IsapiModule" scriptProcessor="FrameworkPath\aspnet_isapi.dll"resourceType="File" /> </system.webServer>其中FrameworkPath有%windir%\Microsoft.NET\Framework64\v4.0.30319和%windir%\Microsoft.NET\Framework32\v4.0.30319兩種取值,事實上就是你的Aspnet_isapi.dll所在的文件夾。
而在集成模式下,已經不需要配置上述第一節,直接配置system.webServer即可,而且也不需要蛋疼地定位aspnet_isapi.dll文件了,因為它的resourceType已經不是file了:
<system.webServer> <handlers><add name="SampleHandler" verb="*" path="SampleHandler.new" type="SampleHandler, SampleHandlerAssembly" resourceType="Unspecified" /> </handlers> </system.webServer>我做的是最后這一種更改,成功。
同時順便做了個小例子,自己在app_code里面寫了一個httphandler,輸出了幾個字,同樣用最后這種配置方式(type處不需要寫命名空間了,因為是在app_code里面,寫全名即可),正常輸出。可見這個問題僅僅是該項目作者的示例項目闡述不詳細所致,自己找到注冊自定義handler的方法即可使用。
順便送上一句自stackoverflow的話:The <system.web> section applies to IIS6 and below whereas <system.webServer> applies to IIS7 and above.
總結
以上是生活随笔為你收集整理的注册自定义HTTP Handlers的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sshd_config 中文手册
- 下一篇: 设置ios6中UIViewControl