[ASP.NET]HttpModuleによる動的Webページコンテンツフィルタリング
ターゲット
Webリクエストの動的コンテンツを文字列フィルタリングすることを実現します.たとえば、すべてのコメントや空の行を削除したり(自分で構成できます)、HTML出力ストリームを圧縮したりして、トラフィック消費を削減することができます.
前言
HttpModuleとその役割については、自分で関連記事を探すことができます.本稿では,HttpModuleの実用化により,サーバの動的処理要求プロセスの理解を深めることを目的とする.その中で、ネット上の何人かの大侠の処理構想を参考にして、同時に自分の実際と結びつけて、自分の方法を編んだ.もちろんもっと適切な処理方法があるに違いないが、縁があってこの文章を見ることができる友达が教えてくれることを望んで、その中の不当なところに対して、指摘できれば、感謝しきれない.
HttpModuleの作成
using System;
using System.Web;
using System.Web.Configuration;
///
/// HTTP
///
public class HttpFilterModule : IHttpModule
{
public HttpFilterModule(){}
public void Init(HttpApplication application)
{
//TODO:
}
public void Dispose() { }
}
主なHttpModuleが確立され、現在必要なのは実現方法である.しかし、今ではもう一つの重要なオブジェクトに関連しています.Response.Filter、IntelliSenseの迅速な情報で見ることができます.Response.FilterオブジェクトはSystemに属する.IO.Streamオブジェクトは、「送信前にHTTPエンティティ本体を変更するためのパッケージフィルタオブジェクトを取得または設定します.」したがって,変更(設定)によりオブジェクトを変更することで,HTTPエンティティ本体コンテンツをフィルタリングする目的が達成できることが分かる.RawFilterフィルタの作成
Response.FilterオブジェクトはSystemに属する.IO.Streamオブジェクトを変更するには、元のフィルタオブジェクトを作成してStreamオブジェクトを継承し、Streamオブジェクトを書き換えるWrite()メソッドで出力オブジェクトを変更し、最後に書き換えたStreamストリームオブジェクトをResponseに割り当てます.Filterオブジェクトでいいです.詳細:新規RawFilter.csファイル、デフォルトはApp_Codeフォルダで、ダブルクリックして次のコードを入力します.
using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using System.Xml.XPath;
///
/// ,
///
public class RawFilter : Stream
{
Stream responseStream;
HttpRequest request;
long position;
StringBuilder responseHtml;
///
///
///
///
public RawFilter(Stream inputStream, HttpRequest httpRequest)
{
responseStream = inputStream;
responseHtml = new StringBuilder();
request = httpRequest;
}
// , HttpResponse , , ( )
public override void Write(byte[] buffer, int offset, int count)
{
string strBuffer = System.Text.UTF8Encoding.UTF8.GetString(buffer, offset, count);
// ,