功能需求:
当访问的资源文件(主要是图片)不存在时,通过HttpModule处理程序捕获,然后返回指定的资源文件
功能实现:
编码非常简单,相信大家都会写,就不贴出来献丑了。主要问题是web.config的配置,IIS7+关于HttpModule的配置如下
<pre name="code" class="csharp"><system.webServer>
<directoryBrowse enabled="true" />
<validation validateIntegratedModeConfiguration="false" />
<security>
<requestFiltering>
<fileExtensions>
<add fileExtension=".png" allowed="true" />
</fileExtensions>
</requestFiltering>
</security>
<pre name="code" class="csharp"> <httpErrors errorMode="DetailedLocalOnly"></httpErrors>
<modules> <add type="CommonClass.HttpModule,CommonClass" name="HttpModule" /> </modules> </system.webServer>
编码、配置完毕,本地测试成功。但当发布到外网服务器上后,死活不进管道处理程序(CommonClass.HttpModule),网上查了很多资料,尝试过很多办法,都未能解决。今天来继续研究,功夫不付苦心人,终于发现症结所在。
<system.webServer>
<directoryBrowse enabled="true" />
<validation validateIntegratedModeConfiguration="false" />
<security>
<requestFiltering>
<fileExtensions>
<add fileExtension=".png" allowed="true" />
</fileExtensions>
</requestFiltering>
</security>
<span style="color:#ffffff;background-color: rgb(153, 0, 0);"> <httpErrors errorMode="DetailedLocalOnly"></httpErrors></span>
<modules>
<add type="CommonClass.HttpModule,CommonClass" name="HttpModule" />
</modules>
</system.webServer>
没错,就是红色区域标记的这段配置,去年之后就正常了,具体原因就不多解释了,有兴趣的同学了解下httpErrors节点的配置就懂了。
再补充一个可以实现该功能需求的方法,这也是在解决上面那个问题时想出来的一个方法,那就是单独配置404错误处理项。
同样也是在web.config中操作,配置如下:
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/Handler.ashx" responseMode="ExecuteURL" />
</httpErrors>
这种方法肯定是没有上种方法灵活,所以个人采用的还是HttpModule管道处理的方法。