как определить тип содержимого ответа в asp.net mvc

Я написал очень простой обработчик минимизации/сжатия, который минимизирует css и js, указывая тип запроса (Request.RawUrl.EndsWith("css" || "js")), но я не знаю подхода, чтобы указать, какой тип ответа является html, а затем минимизировать его как HTML-контент, потому что в mvc нет не расширение для проверки.

заранее спасибо ;)


person Sadegh    schedule 20.06.2010    source источник


Ответы (2)


Если вы написали обработчик HTTP для сжатия статических ресурсов вам решать, как настроить заголовок Content-Type в зависимости от типа файла:

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

Кстати, я бы порекомендовал вам заранее минимизировать/сжать ваши статические ресурсы и полагаться на gzip сжатие веб-сервера и кэширование клиента. Я бы не стал писать такие обработчики, если это не образовательные цели.

person Darin Dimitrov    schedule 20.06.2010
comment
хорошо, но я хочу определить, является ли respnse выводом html, а затем минимизировать/сжать его как html, или если respnse является js, то минимизировать/сжать его как js и т. д. - person Sadegh; 20.06.2010
comment
Какой ответ? Это ваш обработчик HTTP генерирует ответ, не так ли? - person Darin Dimitrov; 20.06.2010
comment
какой другой подход к этому? почему не обработчик? - person Sadegh; 20.06.2010
comment
Другой подход заключается в том, чтобы заранее сжать/минимизировать статические ресурсы с помощью одного из множества доступных инструментов и развернуть сайт с уже минимизированными статическими ресурсами. С точки зрения производительности лучше оставить статические ресурсы в ведении веб-сервера. - person Darin Dimitrov; 20.06.2010
comment
хорошо, но есть также несколько статей, которые используются для минификации/сжатия на лету, например codeproject.com /KB/aspnet/combres2.aspx или codeproject.com/KB/aspnet /AspNetOptimizer.aspx и т. д.; но я согласен с вашим ответом, но можете ли вы помочь мне решить эту проблему? ;) - person Sadegh; 20.06.2010
comment
в combres2 автор обнаружил HTML по расширению .aspx - person Sadegh; 20.06.2010
comment
Для файлов javascript есть Dean Edwards Packer (dean.edwards.name/packer), Google Closure Compiler (code.google.com/closure/compiler), YUI Compressor (developer.yahoo.com/yui/compressor) и сотни других инструментов. Выберите один из них, загрузите в него свои javascript-файлы и используйте файлы результатов на своем сайте. В идеале этот процесс должен быть автоматизирован как часть процесса непрерывной интеграции, чтобы при изменении исходного кода во время сборки файлы автоматически сжимались. Никаких обработчиков для этого писать не нужно. Обработчики полезны для динамического содержимого. - person Darin Dimitrov; 20.06.2010
comment
именно, обработчики полезны для динамического содержимого, когда я запрашиваю mysite.com/, вывод динамически отображается для пользователя, и я хочу обработать этот вывод, например, минимизировать/сжать. как? Я уже использовал Packer.NET, YUI Composser, MSAJAX Minifier, но не использовал ориентированный на HTML подход. - person Sadegh; 20.06.2010

хм..., я думаю, вы неправильно поняли мою цель/проблему. вот мой обработчик:

 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);
        }
    }
person Sadegh    schedule 20.06.2010