C# 用于重写ASP.NET页面上的呈现函数的HttpHandler与HttpModule

C# 用于重写ASP.NET页面上的呈现函数的HttpHandler与HttpModule,c#,.net,asp.net,webforms,C#,.net,Asp.net,Webforms,我试图在生成的页面上找到所有CSS标签 所以据我所知,有两种方法可以做到这一点 直接在ASP.NET页面上重写该函数,并在HTML中插入一个链接标记,引用某个ashx(css.ashx)页面(HttpHandler),然后该页面将读取所有css文件,并在响应中将它们作为一个整体一起发送出去。对所有其他页面执行相同的覆盖 或 使用使用相同方法但不需要在每个ASP.NET页面上不断重写呈现函数的HttpModule 每种方法的优缺点是什么?你们有什么建议吗 谢谢我认为您试图解决的是对一个CSS文件的

我试图在生成的页面上找到所有CSS标签 所以据我所知,有两种方法可以做到这一点

  • 直接在ASP.NET页面上重写该函数,并在HTML中插入一个链接标记,引用某个ashx(css.ashx)页面(HttpHandler),然后该页面将读取所有css文件,并在响应中将它们作为一个整体一起发送出去。对所有其他页面执行相同的覆盖
  • 使用使用相同方法但不需要在每个ASP.NET页面上不断重写呈现函数的HttpModule
  • 每种方法的优缺点是什么?你们有什么建议吗


    谢谢

    我认为您试图解决的是对一个CSS文件的单个请求,而不是对所有CSS文件的多个请求

    我认为你的两种解决方案都行不通。如果我明白你在做什么。如果您获取所有请求的文件并添加一个链接来处理聚合版本,那么在发出请求时,您如何决定实际将什么放入处理程序中

    更好的解决方案是在母版页中向处理程序添加一个链接。然后处理程序聚合css文件,压缩它们,缓存它并输出它


    编辑:针对评论:“我在构建过程中缩小…我使用IIS压缩…聚合的版本类似于css.ashx?file1.css、file2.css、someOtherfile.css文件用逗号分隔。我用逻辑处理这些文件…然后我可以在响应中添加缓存和自定义标题…明白吗?”

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

    我看过一些博客文章,其中详细介绍了构建过程中的缩小,这很好,但是如果你需要对css做一个小的更改,你不能只是快速跳转到服务器上,更改一个值,然后完成它,你实际上需要再次经历构建过程并上传单个文件

    另外,我不认为将所有文件作为参数是一个好主意,因为您正在为每个页面创建一组不同的URL


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

    该键位于web.config appsettings中,包含一个逗号分隔的css文件字符串

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

    编辑2:另一种方法是只使用单个链接,并在构建过程中使用合并/缩小。即使您合并了一些未在主页上使用的css文件,这些文件也应该相对较小,因为它们是缓存的,所以您在第二页请求上加快了请求速度

    在您的场景中,您需要浏览器发出一个请求,请求它已经拥有的css文件,以及您可能已经包含在第二页中的其他css文件。(如果有道理的话)

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


    这是毫无意义的,因为您可以重用主页中的css来呈现about页面。

    +1 OP过度考虑了一个非问题。在你的构建过程中合并和压缩你会没事的。回答得好。我在构建过程中缩小了…我使用IIS压缩。。。聚合版本类似于css.ashx?file1.css、file2.css、someOtherfile.css。这些文件用逗号分隔。我用逻辑来处理…然后我可以在响应中添加缓存和自定义头。。。。明白了吗?@Issa Fram-添加到我的答案中。编辑后加入了bendewey的评论“我这样做的方式是创建一个具有2个查询字符串值的处理程序。密钥和版本。该键位于web.config appsettings中,包含一个逗号分隔的css文件字符串。向处理程序发出请求后,它会在缓存中查找密钥/版本,如果它不存在,它会从web.config中获取值,加载所有文件,缩小它们,压缩它们并缓存它们。添加所有的标题并输出请求。“我喜欢这样做……但我现在的情况是,我必须在运行时这样做……我不知道我手头上有哪些文件可以放入设置文件中。你能解释一下CSS标记的含义吗?这是一个link rel=“text/CSS”标记还是你在页面中的任何地方谈论CSS样式?