ASP.NET系统中默认的HttpModule:
DefaultAuthenticationModule 确保上下文中存在 Authentication 对象。无法继承此类。
FileAuthorizationModule 验证远程用户是否具有访问所请求文件的 NT 权限。无法继承此类。
FormsAuthenticationModule 启用 ASP.NET 应用程序以使用 Forms 身份验证。无法继承此类。
PassportAuthenticationModule 提供环绕 PassportAuthentication 服务的包装。无法继承此类。
SessionStateModule 为应用程序提供会话状态服务。
UrlAuthorizationModule 提供基于 URL 的授权服务以允许或拒绝对指定资源的访问。无法继承此类。
WindowsAuthenticationModule 启用 ASP.NET 应用程序以使用 Windows/IIS 身份验证。无法继承此类
创建一个类库,建立如下类:
代码如下 | 复制代码 |
using System; 页面执行时间:" + (endtime - starttime).ToString() + " ");} //必须实现dispose接口 public void Dispose() { } } } |
生成后将dll文件copy到bin目录,接着在web.config中注册这个HttpModule:
代码如下 | 复制代码 |
|
这样网站的每一个.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 等等