2013-03-07 126 views
5

我已經爲生成一個圖像的ASP.NET MVC4網站編寫了一個httpHandler。 ProcessRequest函數未被調用。任何想法爲什麼?爲什麼沒有運行httphandler

MVC4,IIS Express中,Windows 8的臨

的Web.config> system.webServer

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <handlers> 
     <remove name="TextImage" /> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
     <add name="TextImage" path="textimage/*.png" verb="*" resourceType="Unspecified" type="MultiStepUI.TextImageHandler, MultiStepUI_MOBETTER" /> 
    </handlers> 
    </system.webServer> 

使用

<img src="/textimage/step1.png?q=Step 1&c=404040&w=30&h=250&z=12" /> 
+0

http://forums.asp.net/post/3416052.aspx – 2013-03-07 04:07:27

+0

好吧,謝謝你tmack的鏈接解釋什麼是httphandler。不幸的是,這與我的問題完全無關。 – 2013-03-07 04:22:19

+0

yyyyyyep。注意自我,停止瀏覽。 – 2013-03-07 04:33:45

回答

12

答案可以在網上找到如果一個人知道要尋找什麼。

MVC路由引擎試圖將所有請求映射到控制器 - 這不是我們在這種情況下想要的。除了在Web.config中註冊處理程序之外,我們還需要告訴MVC路由引擎忽略httpHandler path,以便ASP.NET引擎可以處理其路由。

我選擇使用example from Phil Haack

爲了對抗環節腐,這是從文章

默認情況下的摘錄,ASP.NET路由會忽略不 文件的請求存在於磁盤上。我在之前發佈的 路由更改中解釋了原因。長話短說,我們不希望路由到 嘗試路由請求靜態文件,如圖像。 不幸的是,當我們想起ASP.NET的許多 功能請求.dd文件時,我們很頭疼,它們不存在於 磁盤上。

爲了解決這個問題,我們包括在 RouteCollection,IgnoreRoute,創建一個路由映射到 StopRoutingHandler路由處理(類實現 IRouteHandler)的新擴展方法。實際上,任何匹配「忽略 路由」的請求都將被路由忽略,並且正常的ASP.NET處理將基於現有的http處理程序映射發生 。因此,在我們的默認 模板中,您會注意到我們已經定義了以下路線。

routes.IgnoreRoute(「{resource} .axd/{* pathInfo}」);

這處理 標準.axd請求。但是,在其他情況下,您可能會對 請求磁盤上不存在的文件。例如,如果您將 直接註冊到實現了 IHttpHandler的類型的HTTP處理程序。更不用提favicon.ico對瀏覽器 自動生成的請求。 ASP.NET路由嘗試將這些請求 路由到控制器。對此的一種解決方案是添加適當的忽略 路由以指示路由應該忽略這些請求。 不幸的是,我們不能這樣做:

{* path}。aspx/{* pathinfo}

我們只允許一個全通路由,它必須在URL的末尾發生 。但是,您可以採取以下 的方法。在這個例子中,我添加了以下兩條路線。

routes.IgnoreRoute(「{* allaspx}」,new {allaspx = @「。* \。aspx(/.*)?」});
routes.IgnoreRoute(「{* favicon}」,new {favicon = @「(。* /)?favicon.ico(/.*)?」});

我在做什麼這裏是一個 技術Eilon表明我這是映射所有網址,這些路線, 後來通過限制的約束 字典忽略的路由。因此,在這種情況下,這些路由將匹配(並因此忽略) 對favicon.ico的所有請求(不管是哪個目錄)以及 對.aspx文件的請求。由於我們告訴路由忽略這些請求,所以會發生這些請求的正常ASP.NET處理。

+0

這應該被標記爲答案。該文章有此更正「默認情況下,ASP.NET路由會忽略對磁盤上存在的文件的請求。」 – 2013-06-19 15:50:30

0

上一個答案是正確的,但文章已從這裏的摘錄中編輯。忽略語句應爲:

routes.IgnoreRoute("{*allaspx}", new {[email protected]".*\.aspx(/.*)?"}); 
routes.IgnoreRoute("{*favicon}", new {[email protected]"(.*/)?favicon.ico(/.*)?"}); 

請注意原始文件中缺少的{* allaspx}和{* favicon}字符串中的'*'。 我不能讓它工作,直到我跟隨鏈接,並按照更新的文章中的示例。

+0

弗蘭克,謝謝你指出這一點。這篇文章沒有編輯。我沒有理解它,但是SO降價渲染器認爲塊引用中的'*'是格式化的,而不是內容。我已經逃脫了正確的符號,現在塊引用的內容應該與原本的內容匹配 - 儘管現在塊引用背後的「實際」內容與呈現內容不同 - 如果這樣做有任何意義。 – 2015-04-01 01:26:41

相關問題