在我的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;
答案 0 :(得分:1)
如果您的压缩是在Global.asax上完成的,那么您需要在此处放置压缩代码,以告诉您需要在程序上进行哪些更改。
可能会检查文件扩展名。
答案 1 :(得分:0)