C#, Как сжать .ashx содержание?

В моем веб-приложении я использую ashx файл для записи файла в браузер. Я заметил, что нет никакого сжатия по .ashx файлу, но только по моим .aspx файлам.

Действительно ли возможно сжать .ashx? И если это возможно, как?

В настоящее время я использую global.asax для обработки сжатия:

<%@ Application Language="C#" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.IO.Compression" %>

<script runat="server">
void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
    HttpApplication app = sender as HttpApplication;
    string acceptEncoding = app.Request.Headers["Accept-Encoding"];
    Stream prevUncompressedStream = app.Response.Filter;

    if (!(app.Context.CurrentHandler is Page ||
        app.Context.CurrentHandler.GetType().Name == "SyncSessionlessHandler") ||
        app.Request["HTTP_X_MICROSOFTAJAX"] != null)
        return;

    if (acceptEncoding == null || acceptEncoding.Length == 0)
        return;

    acceptEncoding = acceptEncoding.ToLower();

    if (acceptEncoding.Contains("deflate") || acceptEncoding == "*")
    {
        // defalte
        app.Response.Filter = new DeflateStream(prevUncompressedStream,
            CompressionMode.Compress);
        app.Response.AppendHeader("Content-Encoding", "deflate");
    } else if (acceptEncoding.Contains("gzip"))
    {
        // gzip
        app.Response.Filter = new GZipStream(prevUncompressedStream,
            CompressionMode.Compress);
        app.Response.AppendHeader("Content-Encoding", "gzip");
    }
}
</script>

Это сжимается обо всем кроме моих .ashx файлов. Кто может помочь мне?

РЕШЕНИЕ

Поскольку я создал .ashx файл, я автоматически создал новый тип (мой случай ViewMht). Этот тип не проникал через первое если оператор:

    if (!(app.Context.CurrentHandler is Page ||
        app.Context.CurrentHandler.GetType().Name == "SyncSessionlessHandler") ||
        app.Request["HTTP_X_MICROSOFTAJAX"] != null)
        return;

Поскольку Вы видите только файлы, которые наследовались от 'Page', сжаты, и мой ashx файл не имеет полосы набора. Таким образом, я добавил условие, и теперь оно работает просто великолепно:

if (!(app.Context.CurrentHandler is Page ||
      app.Context.CurrentHandler.GetType().Name == "SyncSessionlessHandler" ||
      app.Context.CurrentHandler is ViewMht // This is the type I had to add
      ) ||
      app.Request["HTTP_X_MICROSOFTAJAX"] != null)
        return;
8
задан Martijn 3 June 2010 в 09:28
поделиться

2 ответа

Если ваше сжатие выполняется на Global.asax, вам необходимо разместить здесь код сжатия, чтобы сообщить вам, что вам нужно изменить в вашей программе.

Вероятно, есть проверка на расширение файла.

1
ответ дан 6 December 2019 в 02:24
поделиться
0
ответ дан 6 December 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: