/* http://msdn.microsoft.com/zh-cn/library/bb470252 http://msdn.microsoft.com/zh-cn/library/ms178472 */ namespace Microshaoft { using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Threading; using System.Reflection; public class TestHttpModule : IHttpModule { /// <summary> /// 您将需要在您网站的 web.config 文件中配置此模块, /// 并向 IIS 注册此模块,然后才能使用。有关详细信息, /// 请参见下面的链接: http://go.microsoft.com/?linkid=8101007 /// </summary> #region IHttpModule Members public void Dispose() { //此处放置清除代码。 } //private HttpContext _httpContext; //private HttpRequest _httpRequest; //private HttpResponse _httpResponse; public void Init(HttpApplication httpApplication) { // 下面是如何处理 LogRequest 事件并为其 // 提供自定义日志记录实现的示例 var httpContext = httpApplication.Context; //return; var eventsInfosNamesBlackList = new List<string>() { "MapRequestHandler" , "LogRequest" }; var eventsInfos = typeof(HttpApplication) .GetEvents() .ToList() .Where ( (x) => { return !eventsInfosNamesBlackList.Any ( (xx) => { return x.Name.ToLower().Contains(xx.ToLower()); } ); ; } ).ToArray(); //Exception Details: System.PlatformNotSupportedException: This operation requires IIS integrated pipeline mode. /// httpApplication.MapRequestHandler += new EventHandler(HttpApplication_EventHandlerProcess); /// httpApplication.PostMapRequestHandler += new EventHandler(HttpApplication_EventHandlerProcess); /// httpApplication.LogRequest += new EventHandler(HttpApplication_EventHandlerProcess); /// httpApplication.PostLogRequest += new EventHandler(HttpApplication_EventHandlerProcess); long i = 1; Array.ForEach ( eventsInfos , (x) => { Console.WriteLine(x.Name); x.AddEventHandler ( httpApplication , new EventHandler ( (xx, y) => { Console.WriteLine(x.Name); var application = xx as HttpApplication; //var application = sender as HttpApplication; var context = application.Context; var request = context.Request; var response = context.Response; //Exception Details: System.PlatformNotSupportedException: This operation requires IIS integrated pipeline mode. //response.Write(context.CurrentNotification + "<br>"); var s = string.Format ( "{1}{0}{2}{0}{3}" , " : " , "HttpModule" , i++ , x.Name ); response.Write(s + "<br>"); HttpApplication_EventHandlerProcess ( xx , y , x.Name ); try { //application.Response.End(); } catch (ThreadAbortException tae) { } } ) ); } ); } void HttpApplication_EventHandlerProcess ( object sender , EventArgs e , string remark = null //string.Empty ) { var application = sender as HttpApplication; //var application = sender as HttpApplication; var context = application.Context; var request = context.Request; var response = context.Response; //response.Write("Remark: " + remark + "<br>"); //response.Write(context.CurrentNotification + "<br>"); } #endregion } } namespace Microshaoft { using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Web; using System.Web.UI; public partial class PageLifeCycleTest : Page { static long _f1; long _f2; override protected void OnInit(EventArgs e) { _f1++; _f2++; var eventsInfosNamesBlackList = new List<string>() { "MapRequestHandler" , "LogRequest" , "Unload" }; var eventsInfos = typeof(Page) .GetEvents() .ToList() .Where ( (x) => { return !eventsInfosNamesBlackList.Any ( (xx) => { return x.Name.ToLower().Contains(xx.ToLower()); } ); } ).ToArray(); short i = 1; Array.ForEach ( eventsInfos , (x) => { Console.WriteLine(x.Name); x.AddEventHandler ( this , new EventHandler ( (xx, y) => { Console.WriteLine(x.Name); var page = xx as Page; //Exception Details: System.PlatformNotSupportedException: This operation requires IIS integrated pipeline mode. //response.Write(context.CurrentNotification + "<br>"); var s = string.Format ( "{1}{0}{2}{0}{3}" , " : " , "Page" , i++ , x.Name ); //if (Response != null) { Response.Write(s + "<br>"); //Response.Write("static: " + _f1 + "<br>"); } s = string.Format ( "{1}{0}{2}{0}{3}{0}{4}" , " : " , "Page Static Member" , _f1 , "Page Instance Member" , _f2 ); //if (Response != null) { Response.Write(s + "<br>"); //Response.Write("static: " + _f1 + "<br>"); } try { //application.Response.End(); } catch (ThreadAbortException tae) { } } ) ); } ); base.OnInit(e); } } } /* http://local.asp.net/pagelifecycletest.aspx <%@ Page ValidateRequest="false" Debug="true" ContentType="text/html;charset=UTF-8" %> <%@ Import Namespace="System" %> <%@ Import Namespace="System.Linq" %> <%@ Import Namespace="System.Threading" %> <%@ Import Namespace="System.Web" %> <%@ Import Namespace="System.Web.UI" %> <script language="C#" runat="server"> static long _f1; long _f2; override protected void OnInit(EventArgs e) { _f1 ++; _f2 ++; var eventsInfosNamesBlackList = new List<string>() { "MapRequestHandler" , "LogRequest" , "Unload" }; var eventsInfos = typeof(Page) .GetEvents() .ToList() .Where ( (x) => { return !eventsInfosNamesBlackList.Any ( (xx) => { return x.Name.ToLower().Contains(xx.ToLower()); } ); } ).ToArray(); short i = 1; Array.ForEach ( eventsInfos , (x) => { Console.WriteLine(x.Name); x.AddEventHandler ( this , new EventHandler ( (xx, y) => { Console.WriteLine(x.Name); var page = xx as Page; //Exception Details: System.PlatformNotSupportedException: This operation requires IIS integrated pipeline mode. //response.Write(context.CurrentNotification + "<br>"); var s = string.Format ( "{1}{0}{2}{0}{3}" , " : " , "Page" , i++ , x.Name ); //if (Response != null) { Response.Write(s + "<br>"); //Response.Write("static: " + _f1 + "<br>"); } s = string.Format ( "{1}{0}{2}{0}{3}{0}{4}" , " : " , "Page Static Member" , _f1 , "Page Instance Member" , _f2 ); //if (Response != null) { Response.Write(s + "<br>"); //Response.Write("static: " + _f1 + "<br>"); } try { //application.Response.End(); } catch (ThreadAbortException tae) { } } ) ); } ); base.OnInit(e); } </script> */ /* http://local.asp.net/pagelifecycletest1.aspx <%@ Page ValidateRequest="false" Debug="true" Inherits="Microshaoft.PageLifeCycleTest" ContentType="text/html;charset=UTF-8" %> */ /* http://local.asp.net/pagelifecycletest1.aspx <%@ Page ValidateRequest="false" Debug="true" Inherits="Microshaoft.PageLifeCycleTest" ContentType="text/html;charset=UTF-8" %> */ /* Web.Config <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.webServer> <modules> <add name="TestHttpModule" type="Microshaoft.TestHttpModule, TestHttpModule" /> </modules> </system.webServer> <system.web> <httpModules> <add name="TestHttpModule" type="Microshaoft.TestHttpModule, TestHttpModule" /> </httpModules> </system.web> </configuration> */ |