我为HttpHandler
设置*css
来做一些简单的解析:
<handlers>
<add name="CssHandler" verb="*" path="*.css"
type="MyApp.CssProcessor,MyApp.Assembly"/>
</handlers>
一切都很好,直到我添加了一个动态加载css文件的资源,例如
<link rel="stylesheet" type="text/css" href="/loader.ashx/module.resource.css" >
令我惊讶的是,事情发生了可怕的错误。自定义http处理程序拦截了这个,但由于它只是从文件系统加载文件,它不起作用。我意识到,从技术上讲,它匹配模式*.css
,但这似乎是一种奇怪的行为,因为从Web服务器请求的实际资源是*.ashx
而css仅在文件路径之后,作为参数。
是否可以使处理程序的过滤器仅适用于实际的服务器资源名称?
或者(实际上我想知道如何做到这一点) - 我真正宁愿做的是拦截默认的css处理程序的输出。也就是说,不是让我自己的代码实际从我的CSS处理程序中的文件系统加载文件,似乎只需从默认处理程序中获取响应并过滤它就会简单得多。在这种情况下哪种方法可以正常工作。
最后,在任何一种情况下,我更倾向于过滤资源MIME类型text/css
而不是按名称拦截请求,因为我真正想要做的是过滤任何CSS(而不是发生的任何事情)被命名为“* .css”)。有关如何做到这一点的任何指示?
答案 0 :(得分:0)
你可以...... 1)修改处理程序以检查文件是否存在。 2)使用HttpModule拦截响应。不确定你在这种情况下究竟在做什么,但实际修改输出可能会变得棘手。 3)修改传递给loader.ashx的参数不以.css结尾(这有点hacky) 4)尝试使用“?”作为loader.ashx和参数之间的分隔符,因为还有其他请求(.axd)经常使用查询字符串参数并且仍能正常工作。