asp.net中httpModule计算页面的执行时间

ASP.NET系统中默认的HttpModule:

DefaultAuthenticationModule 确保上下文中存在 Authentication 对象。无法继承此类。
FileAuthorizationModule 验证远程用户是否具有访问所请求文件的 NT 权限。无法继承此类。
FormsAuthenticationModule 启用 ASP.NET 应用程序以使用 Forms 身份验证。无法继承此类。
PassportAuthenticationModule 提供环绕 PassportAuthentication 服务的包装。无法继承此类。
SessionStateModule   为应用程序提供会话状态服务。
UrlAuthorizationModule   提供基于 URL 的授权服务以允许或拒绝对指定资源的访问。无法继承此类。
WindowsAuthenticationModule 启用 ASP.NET 应用程序以使用 Windows/IIS 身份验证。无法继承此类

创建一个类库,建立如下类:

 代码如下 复制代码

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("<p>页面执行时间:" + (endtime - starttime).ToString() + "</p>");  
        }  
        //必须实现dispose接口   
        public void Dispose() { }  
    }  
}

生成后将dll文件copy到bin目录,接着在web.config中注册这个HttpModule:

 代码如下 复制代码

<configuration>   
    <system.web>        
        <httpModules>   
            <add name="TimerHttpModule" type="TimerHttpModule.Class1"/>   
        </httpModules>   
    </system.web>   
</configuration>

这样网站的每一个.net页面底部都会显示页面的执行时间了。

不过这样做要小心,因为每个.net页面末尾都会被加上执行时间,包括webservices和ashx页面,以及你可能不是用来直接做页面的.aspx页面(例如你用来输入json数据或者xml数据)。所以,为了保证安全,还必须采取有针对性的方法来避免这种情况的发生。

方法一:

在Response.Write方法之前做判断,排除一些不想添加执行时间的页面,可以通过Request.URL来判断;

方法二:

不要把执行时间直接添加到页面输出的尾端,而是作为一个http header输出。使用Response.AddHeader(key,value)可以实现这个愿望。

总结:一个Http请求在被ASP.NET Framework捕获之后会依次交给HttpModule以及HttpHandler来处理。hm与hh之间不是完全独立的,实际上,http请求在hm传递的过程中会在某个事件内将控制权转交给hh的,而真正的处理在HttpHandler中执行完成后,HttpHandler会再次将控制权交还给HttpModule
上面的代码中的HttpModule的Init()中的参数是HttpApplication类型,它具有许多事件,包括BeginRequest,EndRequest,AuthentiacteRequest 等等

时间: 2024-08-03 01:08:01

asp.net中httpModule计算页面的执行时间的相关文章

asp.net 通过httpModule计算页面的执行时间

创建一个类库,建立如下类: 复制代码 代码如下: 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)//实现IH

asp.net 通过httpModule计算页面的执行时间_实用技巧

创建一个类库,建立如下类: 复制代码 代码如下: 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)//实现IH

在ASP.NET中实现多页面选择的问题

asp.net|问题|页面 本文介绍如何在ASP.NET中实现多页面选择的问题.其具体思路很简单:用隐藏的INPUT记住每次选择的项目,在进行数据绑定时,检查保存的值,再在DataGrid中进行选中显示.下面时完整的代码和例子: 查看例子 SelectMultiPages.aspx <%@ Page EnableViewState="true" CodeBehind="SelectMultiPages.aspx.cs" Language="c#&qu

asp.net中word导出页面,如何把动态生成的图片也导出word中

问题描述 asp.net中word导出页面,如何把动态生成的图片也导出word中 在word导出页面的时候如何能把生成的图片也导出word里面呢,如果是显示到页面中的话生成的图片是能显示的,但是导入word中的时候就不行了 这是代码 应该怎么才能把图片导出word中呢 解决方案 将asp页面导出到WORDasp.net 页面导出wordasp.net2.0导出生成word 解决方案二: string html=tw.ToString();//存储生成的html代码 html=html.Repla

asp.net放贷计算代码-请教asp.net中放贷计算代码

问题描述 请教asp.net中放贷计算代码 asp.net放贷计算代码asp.net放贷计算代码asp.net放贷计算代码asp.net放贷计算代码 解决方案 google下就有.房贷写错了,这影响你搜索结果的相关性 随便找一个http://download.csdn.net/download/cxd19880708/4039426 别的你也可以自己找.总之,学会自己google.

ASP.NET中让同一个页面不同的文本框回车响应不同的事件

asp.net|文本框|响应|页面 在ASP.NET中,如果同一页面有多个文本框,在每个文本框按"回车"按钮,将会默认响应第一个Button的Click事件,怎样能随意的按回车键而不引发意外的响应或者怎样在不同的地方按回车键得到不同的响应,这个问题曾经困扰过我很久,到目前也没有完全解决,先将目前探讨所得与大家分享,以期抛砖引玉.一.在页面任意的地方按回车键都不引发响应    如果整个页面没有需要设置回车提交的,希望在页面任意的地方按回车键都不引发响应,可以将全页面的回车通通转为Tab,

asp.net中C#计算时间差的示例

C#中怎么计算两时间相差多少.计算2个时间之间的差,可以计算到时分秒!  代码如下 复制代码 <1> label1.Text = "2004-1-1 15:36:05″; label2.Text = "2004-3-1 20:16:35″; DateTime d1 =new DateTime(2004,1,1,15,36,05); DateTime d2 =new DateTime(2004,3,1,20,16,35); TimeSpan d3 = d2.Subtract(

ASP.NET中内嵌页面代码的一个问题_实用技巧

比如 父页面: 复制代码 代码如下: public class BasePage : System.Web.UI.Page { public int HotelID { get { return 1; } } } 子页面: 复制代码 代码如下: public partial class UpdateAlbumAttachments : BasePage { public new int HotelID { get { return 0; } } } 则在*.aspx中写签入代码时只会读取this

如何定期执行asp.net中的一个页面?如何定期执行asp.net中的一个页面?

问题描述 是这样的我有一个windows服务会每隔一段时间更新一下数据库中某个表的列的时间我在页面来核查这个时间是否超过了一定的时间范围来判断这个windows服务是否在正常运行.并把核查出来的结果显示到页面上.这样我就需要隔段时间来执行这个页面,返回给用户正确的结果.请问如何定期来执行这个页面呢?PS一下需求是客户定的,请不要怀疑一些需求性的东西,我想知道的就是如何定期来执行一个页面,谢谢! 解决方案 解决方案二:外部调用vbs定时执行aspx页面解决方案三:请楼上的能详细点吗?谢谢啊.解决方