gpt4 book ai didi

Asp.net使用HttpModule压缩并删除空白Html请求的实现代码

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 48 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Asp.net使用HttpModule压缩并删除空白Html请求的实现代码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

同时我们还可以删除一些空白  段,空行,注释等以使得HTML文档的尺寸变得更小. 让我们先来实现压缩与删除空白类, 继承自Stream类:  。

复制代码代码如下

/// <summary>  /// CompressWhitespaceFilter  /// </summary>  public class CompressWhitespaceFilter : Stream  {  private GZipStream _contentGZipStream;  private DeflateStream _content_DeflateStream;  private Stream _contentStream;  private CompressOptions _compressOptions;  /// <summary>  /// Initializes a new instance of the <see cref="CompressWhitespaceFilter"/> class.  /// </summary>  /// <param name="contentStream">The content stream.</param>  /// <param name="compressOptions">The compress options.</param>  public CompressWhitespaceFilter(Stream contentStream, CompressOptions compressOptions)  {  if (compressOptions == CompressOptions.GZip)  {  this._contentGZipStream = new GZipStream(contentStream, CompressionMode.Compress);  this._contentStream = this._contentGZipStream;  }  else if (compressOptions == CompressOptions.Deflate)  {  this._content_DeflateStream = new DeflateStream(contentStream,CompressionMode.Compress);  this._contentStream = this._content_DeflateStream;  }  else  {  this._contentStream = contentStream;  }  this._compressOptions = compressOptions;  }  public override bool CanRead  {  get { return this._contentStream.CanRead; }  }  public override bool CanSeek  {  get { return this._contentStream.CanSeek; }  }  public override bool CanWrite  {  get { return this._contentStream.CanWrite; }  }  public override void Flush()  {  this._contentStream.Flush();  }  public override long Length  {  get { return this._contentStream.Length; }  }  public override long Position  {  get  {  return this._contentStream.Position;  }  set  {  this._contentStream.Position = value;  }  }  public override int Read(byte[] buffer, int offset, int count)  {  return this._contentStream.Read(buffer, offset, count);  }  public override long Seek(long offset, SeekOrigin origin)  {  return this._contentStream.Seek(offset, origin);  }  public override void SetLength(long value)  {  this._contentStream.SetLength(value);  }  public override void Write(byte[] buffer, int offset, int count)  {  byte[] data = new byte[count + 1];  Buffer.BlockCopy(buffer, offset, data, 0, count);  string strtext = System.Text.Encoding.UTF8.GetString(data);  strtext = Regex.Replace(strtext, "^\s*", string.Empty, RegexOptions.Compiled | RegexOptions.Multiline);  strtext = Regex.Replace(strtext, "\r\n", string.Empty, RegexOptions.Compiled | RegexOptions.Multiline);  strtext = Regex.Replace(strtext, "<!--*.*?-->", string.Empty, RegexOptions.Compiled | RegexOptions.Multiline);  byte[] outdata = System.Text.Encoding.UTF8.GetBytes(strtext);  this._contentStream.Write(outdata, 0, outdata.GetLength(0));  }  }  /// <summary>  /// CompressOptions  /// </summary>  /// <seealso cref="http://en.wikipedia.org/wiki/Zcat#gunzip_and_zcat"/>  /// <seealso cref="http://en.wikipedia.org/wiki/DEFLATE"/>  public enum CompressOptions  {  GZip,  Deflate,  None  }  。

上面的代码使用正则表达式替换字符串,你可以修改那些正则表达式来满足你的需求. 我们同时使用了GZipStream与DeflateStream实现了压缩. 好的,接下来与 HttpModule结合

复制代码代码如下

/// <summary>  /// CompressWhitespaceModule  /// </summary>  public class CompressWhitespaceModule : IHttpModule  {  #region IHttpModule Members  /// <summary>  /// Disposes of the resources (other than memory) used by the module that implements <see cref="T:System.Web.IHttpModule"/>.  /// </summary>  public void Dispose()  {  // Nothing to dispose;  }  /// <summary>  /// Initializes a module and prepares it to handle requests.  /// </summary>  /// <param name="context">An <see cref="T:System.Web.HttpApplication"/> that provides access to the methods, properties, and events common to all application objects within an ASP.NET application</param>  public void Init(HttpApplication context)  {  context.BeginRequest += new EventHandler(context_BeginRequest);  }  /// <summary>  /// Handles the BeginRequest event of the context control.  /// </summary>  /// <param name="sender">The source of the event.</param>  /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>  void context_BeginRequest(object sender, EventArgs e)  {  HttpApplication app = sender as HttpApplication;  if (app.Request.RawUrl.Contains(".aspx"))  {  HttpContext context = app.Context;  HttpRequest request = context.Request;  string acceptEncoding = request.Headers["Accept-Encoding"];  HttpResponse response = context.Response;  if (!string.IsNullOrEmpty(acceptEncoding))  {  acceptEncoding = acceptEncoding.ToUpperInvariant();  if (acceptEncoding.Contains("GZIP"))  {  response.Filter = new CompressWhitespaceFilter(context.Response.Filter, CompressOptions.GZip);  response.AppendHeader("Content-encoding", "gzip");  }  else if (acceptEncoding.Contains("DEFLATE"))  {  response.Filter = new CompressWhitespaceFilter(context.Response.Filter, CompressOptions.Deflate);  response.AppendHeader("Content-encoding", "deflate");  }  }  response.Cache.VaryByHeaders["Accept-Encoding"] = true;  }  }  #endregion  }  。

HttpApplication.BeginRequest 事件是 在 ASP.NET 响应请求时作为 HTTP 执行管线链中的第一个事件发生。  在WEB.CONFIG中你还需要配置:  。

复制代码代码如下

<httpModules>  <add name="CompressWhitespaceModule" type="MyWeb.CompressWhitespaceModule" />  </httpModules>  。

  。

我们来看一下效果,下面没有使用时, 4.8KB 。

Asp.net使用HttpModule压缩并删除空白Html请求的实现代码

接着看,处理过后的效果,Cotent-Encoding: gzip,  filezie: 1.6KB 。

Asp.net使用HttpModule压缩并删除空白Html请求的实现代码

很简单,你可以按需求来增加更多的功能. 希望对您开发有帮助. 作者:Petter Liu 。

最后此篇关于Asp.net使用HttpModule压缩并删除空白Html请求的实现代码的文章就讲到这里了,如果你想了解更多关于Asp.net使用HttpModule压缩并删除空白Html请求的实现代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com