【问题标题】:how to detect response content-type in asp.net mvc如何在asp.net mvc中检测响应内容类型
【发布时间】:2010-06-20 08:09:03
【问题描述】:

我编写了非常简单的缩小/压缩处理程序,通过指示请求类型 (Request.RawUrl.EndsWith("css" || "js")) 来缩小 css 和 js,但我不知道一种方法来指示哪种响应类型是 html,然后将其缩小为 HTML-内容,因为在 mvc 中不是检查的扩展。

提前致谢;)

【问题讨论】:

    标签: asp.net-mvc-2 compression content-type response minify


    【解决方案1】:

    如果您编写了HTTP handler 来压缩静态资源,则取决于您根据文件类型设置Content-Type 标头:

    if (Request.RawUrl.EndsWith("css"))
    {
        Response.ContentType = "text/css";
    } 
    else if (Request.RawUrl.EndsWith("js"))
    {
        Response.ContentType = "text/javascript";
    }
    

    顺便说一句,我建议您提前缩小/压缩您的静态资源,并依靠 Web 服务器的 gzip 压缩和客户端缓存。如果不是出于教育目的,我会避免编写这样的处理程序。

    【讨论】:

    • 好的,但是我想检测respnse是否是html输出,然后将其缩小/压缩为html,或者如果respnse是js,则将其缩小/压缩为js,等等
    • 什么反应?是您的 HTTP 处理程序生成响应,不是吗?
    • 另一种方法是什么?为什么不处理程序?
    • 另一种方法是使用众多可用工具之一提前压缩/缩小您的静态资源,并使用已经缩小的静态资源部署您的站点。从性能的角度来看,最好让 Web 服务器处理静态资源。
    • 好的,但也有几篇文章用于即时缩小/压缩,如codeproject.com/KB/aspnet/combres2.aspxcodeproject.com/KB/aspnet/AspNetOptimizer.aspx 等;但我同意你的回答,但是你能指导我解决这个问题吗? ;)
    【解决方案2】:

    嗯...,我认为您误解了我的目标/问题。这是我的处理程序:

     public void ProcessRequest(HttpContext context)
        {
            if (Preferences.EnableHtmlMinification && **IfResponseContentIsHtml**)
            {
                 //Do minify here
            }
            if (Preferences.EnableHtmlCompression && **IfResponseContentIsHtml**)
            {
                acceptEncoding = acceptEncoding.ToLower(CultureInfo.InvariantCulture);
                if (acceptEncoding.Contains("gzip"))
                {
                    response.Filter = new HtmlCompressStream(response.Filter, CompressionMode.Compress, HtmlCompressStream.CompressionType.GZip);
                    response.AddHeader("Content-encoding", "gzip");
                }
                else if (acceptEncoding.Contains("deflate"))
                {
                    response.Filter = new HtmlCompressStream(response.Filter, CompressionMode.Compress, HtmlCompressStream.CompressionType.Deflate);
                    response.AddHeader("Content-encoding", "deflate");
                }
            }
            else
            {
                response.Filter = new HtmlCompressStream(response.Filter, CompressionMode.Compress, HtmlCompressStream.CompressionType.None);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2022-11-16
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      相关资源
      最近更新 更多