2014-11-20 55 views
1

我们目前在我们的服务器上运行ImageResizer模块,一切正常。我们现在试图让水印插件与这个模块一起工作,但是,我们不想通过QS参数来使用这个插件。我们添加了http处理程序来处理所有图像 请求。对于任何外部请求(URL引用无关),我们将QS添加到映像构建器的设置中,并推出新映像。这是按预期工作的。asp.net ImageResizer InterceptModule可能会阻止httphandler?

我们的水印插件按预期工作,并且水印正确地显示出外部请求请求。但是,如果请求附加了ImageResize QS(因为我们所有的产品图像当前都是这样),则不会触发http处理程序。

所以domain.dev/images/03125_Purge_2L.jpg得到由处理程序捕获,但 domain.dev/images/03125_Purge_2L.jpg?format=jpg &规模都= &模式=垫&锚= middlecenter &宽度= 300 &高度= 300不(它仍然是 通的InterceptModule处理)

该请求或者由ImageResizer InterceptModule或触发处理程序截获,但不能同时使用。我查看了InterceptModule代码,但没有显示,据我所知,它应该阻止稍后在管道中触发http处理程序。

老实说,我不能肯定地说,如果它是从InterceptModule或我的配置为HttpHandlers设置的事情的问题。

有人在某处,一定做了同样的事情......

当前配置设置:

<modules> 
     <remove name="ImageResizingModule" /> 
     <add name="ImageResizingModule" 
      type="ImageResizer.InterceptModule" /> 
    </modules> 
<handlers> 
     <remove name="InyoWatermarkHandler-jpg" /> 
     <add name="InyoWatermarkHandler-jpg" 
       path="*.jpg" 
       verb="GET" 
       type="Domain.Images.WatermarkHandler, Domain.Images" /> 
     <remove name="InyoWatermarkHandler-png" /> 
     <add name="InyoWatermarkHandler-png" 
       path="*.png" 
       verb="GET" 
       type="Domain.Images.WatermarkHandler, Domain.Images" /> 
     <remove name="InyoWatermarkHandler-gif" /> 
     <add name="InyoWatermarkHandler-gif" 
       path="*.gif" 
       verb="GET" 
       type="Domain.Images.WatermarkHandler, Domain.Images" /> 
     <remove name="InyoWatermarkhandler-bmp" /> 
     <add name="InyoWatermarkhandler-bmp" 
       path="*.bmp" 
       verb="GET" 
       type="Domain.Images.WatermarkHandler, Domain.Images" /> 
    </handlers> 

由于两个ImageResizer.InterceptModule和HTTP处理程序独立工作,我作出了一定的假设设置在某种程度上是正确的。

回答

0

看来你试图用你自己的处理程序替换HttpModule,而不是使用提供的钩子来正确实现它。我们有一个best practices guide这解释了为什么这是如此重要。

您应该用Config.Current.Pipeline.PostRewrite的事件处理程序替换您的HttpHandler。这将允许您根据引荐来源或您希望使用的任何其他标准进行嵌入水印。我们have an example of doing this based on folder name

TL; DR:从不使用HttpHandler进行资产交付,它们基本上存在缺陷。