asp.netでhttp Moduleでページの実行時間を計算します。

1982 ワード

クラスライブラリを作成し、次のクラスを作成します。
 
  
using System;
using System.Collections.Generic;
using System.Web;// web
using System.Text;
namespace TimerHttpModule
{
public class Class1:IHttpModule// IHttpModules
{
public void Init(HttpApplication application)// IHttpModules Init
{
//
application.BeginRequest +=new EventHandler(application_BeginRequest);
application.EndRequest+=new EventHandler(application_EndRequest);
}
private DateTime starttime;
private void application_BeginRequest(object sender, EventArgs e)
{
//object sender BeginRequest
// HttpApplication
//HttpApplication HttpContext
starttime = DateTime.Now;
}
private void application_EndRequest(object sender, EventArgs e)
{
DateTime endtime = DateTime.Now;
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
context.Response.Write("

:" + (endtime - starttime).ToString() + "

");
}
// dispose
public void Dispose() { }
}
}
生成後、dllファイルのcopyをbinディレクトリに登録し、web.co nfigにこのHttpModuleを登録する。
 
  







このようなウェブサイトのすべてのページの底には、ページの実行時間が表示されます。
ただし、このようにすると、各.netページの終わりに実行時間が加算されますので、webservicesとasxページと、直接ページを作るのではないかもしれません。aspxページ(例えば、Jsonデータまたはxmlデータを入力するために使用されます)。したがって、安全を保証するためには、このような状況を回避するために、ターゲット的な方法が必要です。
方法1:Request.Write方法の前に判断し、実行時間を追加したくないページを除外して、Request.URLで判断することができます。
方法2:実行時間を直接ページ出力の後端に追加せず、http headerとして出力します。Resonse.Add Header(key,value)を使ってこの願望を実現できます。