GZipping файлы содержимого в ASP.NET MVC 3 - PullRequest
4 голосов
/ 11 февраля 2012

Я использую следующий атрибут для украшения моего BaseController класса.

public class OutputCompressAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        string encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
        if (string.IsNullOrEmpty(encodingsAccepted))
            return;

        encodingsAccepted = encodingsAccepted.ToLowerInvariant();
        HttpResponseBase response = filterContext.HttpContext.Response;

        if (encodingsAccepted.Contains("gzip"))
        {
            response.AppendHeader("Content-encoding", "gzip");
            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
        }
        else if (encodingsAccepted.Contains("deflate"))
        {
            response.AppendHeader("Content-encoding", "deflate");
            response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
        }
    }
}

Проблема в том, что, хотя это прекрасно работает для представлений и каждого результата действия, атрибут не работает длявещи в папке /Content проекта.Мне было интересно, как я могу сделать так, чтобы файлы в папке Content использовали контроллер, или были каким-то образом связаны или перехвачены чем-то, что позволяет мне добавлять эти фильтры в заголовок ответа.

1 Ответ

9 голосов
/ 11 февраля 2012

Вместо того, чтобы писать такие фильтры действий и заново изобретать колеса, вы можете активировать сжатие в IIS. Вы можете сделать это для статического и динамического контента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...