【问题标题】:C# How to compress .ashx content?C#如何压缩.ashx内容?
【发布时间】:2011-02-26 21:15:46
【问题描述】:

在我的 Web 应用程序中,我使用 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 语句:

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

如您所见,只有从“Page”继承的文件被压缩,而我的 ashx 文件不是 Page 类型。所以我添加了一个条件,现在它工作得很好:

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;

【问题讨论】:

  • 如果您的压缩是在 Global.asax 上完成的,那么您需要将压缩代码放在这里,告诉您需要对程序进行哪些更改。可能对文件扩展名进行了检查。
  • @Aristos。多亏了你,我找到了解决方案。问题是它没有通过第一个 if 状态,因为我的 .ashx 文件属于检查中没有出现的类型。所以我将我的类型添加为有效类型,现在页面被压缩。如果您可以发布答案,我可以投票并回答。
  • 谢谢你的信息,我已经发布了一个答案。

标签: c# asp.net


【解决方案1】:

如果您的压缩是在 Global.asax 上完成的,那么您需要将压缩代码放在这里,以告诉您需要对程序进行哪些更改。

可能对文件扩展名进行了检查。

【讨论】:

    【解决方案2】:

    【讨论】:

    • 难道不能在 global.asax 文件中做到这一点吗?因为这是我的 .aspx 压缩发生的地方。
    • 我在 IIS 中设置了压缩,但我的 ashx 文件仍然不压缩。我所有的其他文件都被压缩了,但 .ashx 文件没有。
    猜你喜欢
    • 1970-01-01
    • 2021-11-05
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多