2013-09-24 79 views
1

我想在web.config中配置自定义的IHttpHandler,我不明白我得到的行为。我正在尝试使用IIS Express。ASP.NET MVC中的自定义IHttpHandler映射

这是web.config中的我Sytem.WebServer部分看起来像:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="false" /> 
    <handlers> 
     <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="dynamicPngHandler" verb="*" path="*.png" type="ImagServingTest.HttpHandler.PureCustomPngHandler, ImagServingTest"/> 
    </handlers> 
    </system.webServer> 

的http://本地主机:48705 /为Default.png(不工作,我得到一个404)

http:// localhost:48705/something/default.png(不工作,我得到一个404)

http:// localhost:48705/something/something/default.png(不工作,我得到a 404)

http ://本地主机:48705 /事/某事/某事/为Default.png(作品)

我不明白为什么会这样。为什么映射失败,直到我在localhost之后有三个部分的url? 我想象一下,这是一个MVC4应用程序很重要(尽管我看不出为什么)。

UPDATE

我已经试过这使用web表单,而不是MVC和它的作品如预期。

在MVC项目中,我试图移动定制的处理程序,以便它是第一个处理程序web.config中名单上,它仍然没有奏效。

+0

system.webServer/handlers部分由iis使用。但是,您的adddress(localhost:48705)表明您正在使用使用其他处理程序部分(system.web/httpHandlers)的vs集成Web服务器。 –

+0

不要认为是这种情况,即使在使用vs集成web服务器时,它仍然是集成模式。我曾尝试将处理程序映射添加到httpHandlers中,并且收到验证错误消息(如果您尝试在集成模式下添加该配置,则会得到相同的结果)。还尝试关闭验证:system.webServer /验证validateIntegratedModeConfiguration =“false”并具有这两种配置。也没有工作。 – Rui

回答

2

的原因请求无针对这些网址是,他们被涵盖MVC的默认路由规则:“{控制器}/{行动}/{ID}”,因为所有那些有缺省值。

我添加routes.IgnoreRoute( “{}忽略.PNG”);到RouteConfig,我现在看到了我期望的行为