HttpHandler vs HttpModule用于覆盖ASP.NET页面上的渲染函数

时间:2011-01-27 03:22:03

标签: c# .net asp.net webforms

我试图在生成的页面上找到所有CSS标签

所以据我所知,有两种方法可以做到这一点......

  1. 直接在ASP.NET页面上覆盖该函数,并在HTML中引入一个链接标记,引用一些ashx(css.ashx)页面(HttpHandler),然后将读取所有CSS文件并将它们全部一起发送到作为一个回应。对所有其他页面执行相同的覆盖。
  2. OR

    1. 使用HttpModule,它使用相同的方法,但不需要在每个ASP.NET页面上不断覆盖Render函数。
    2. 每个人的优点/缺点是什么,你们推荐什么?

      由于

1 个答案:

答案 0 :(得分:1)

我认为你要解决的是对CSS文件的单一请求,而不是对所有CSS文件的多个请求。

我认为你的任何一种解决方案都不会起作用。如果我明白你在做什么。如果您获取所有请求的文件并添加单个链接来处理聚合版本,那么在请求发生时如何确定实际放入处理程序的内容?

更好的解决方案是将主页面中的单个链接添加到处理程序。然后你的处理程序聚合css文件,压缩它们,缓存它并输出它。

编辑:要发表评论:“我在构建过程中缩小...我使用IIS压缩...聚合版本看起来像这个css.ashx?file1。 css,file2.css,someOtherfile.css文件用逗号分隔。我用逻辑处理...然后我可以在响应中添加缓存和自定义标题....获取它?“

在我看来。每个页面请求创建该链接似乎有点愚蠢。这似乎没必要。这个概念很好,这是我做的(不同的),但我不同意你的方法。

我看过博客帖子详细介绍了构建过程中的缩小,但是如果你需要对css做一个小改动,你就不能快速跳到服务器上,改变一个值,然后完成后,您实际上需要再次完成构建过程并上传单个文件。

此外,我不认为将所有文件作为参数是一个好主意,你为每个页面制作了一堆不同的网址。

我这样做的方法是创建一个具有2个查询字符串值的处理程序。一把钥匙和版本。

该密钥位于web.config appsettings中,其中包含逗号分隔的css文件字符串。

发出对处理程序的请求,它在缓存中查找密钥/版本,如果它不存在,它从web.config中获取值,加载所有文件,缩小它们,压缩它们和缓存它。添加所有标头并输出请求。

编辑2:另一种方法是使用单个链接,并在构建过程中使用combine / minify。即使您正在组合主页上未使用的一些css文件,这些文件也应该相对较小,并且由于它们是缓存的,因此您在第二页请求时加快了请求。

在您的场景中,您需要浏览器发出已有的css文件请求,请添加您可能包含在第二页中的其他css文件。 (如果这是有道理的)

首页 - css.ashx?files = css1.css,css2.css,css3.css
AboutPage - css.ashx?files = css1.css,css3.css

这是没有意义的,因为您可以重新使用主页上的css来呈现关于页面。