Generate and serving gz compressed in ASP.NET

2020-07-18 02:36发布

问题:

Hi I need to serve from a ASHX a GZ compressed file. In the code I already have the string in clear:

public void ProcessRequest(HttpContext context)
{
    // this is the code without compression
    HttpRequest Request = context.Request;
    HttpResponse Response = context.Response;

    Response.ContentEncoding = Encoding.UTF8;
    Response.ContentType = "text/xml";

    // this is the string to compress and send to the client
    string xml = GenerateXml();

    Response.Write(output);
    Response.End();
}

Now and I need to

  • compress xml in GZ (for a compressed sitemap file http://www.sitemaps.org/protocol.php#sitemapXMLExample)
  • send it to the Response.OutputStream
  • set some HTTP response header (content type, encoding, ecc.)

Any help?

回答1:

You could enable compression at IIS level for a specific directory. I believe this will be more efficient than doing it by hand in the generic handler.


UPDATE:

You could use GZipStream to compress the xml directly to thew response stream:

public void ProcessRequest(HttpContext context)
{
    context.Response.ContentType = "application/x-gzip";
    var xml = "<xml/>";
    using (var gzipStream = new GZipStream(context.Response.OutputStream, CompressionMode.Compress))
    {
        var buffer = Encoding.UTF8.GetBytes(xml);
        gzipStream.Write(buffer, 0, buffer.Length);
    }
}


回答2:

GZip compression is supported in ASP.NET. A quick Google resulted in these posts which seem to help:

http://west-wind.com/WebLog/posts/10294.aspx - doing GZip
http://www.west-wind.com/Weblog/posts/10564.aspx - returning the result



标签: c# asp.net gzip