前一阶段用spring.net做东西,一直想模拟一下它的页面注入,不清楚它是怎么实现的,懒得看他源码,自己简单写了一个,估计也差不多
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Reflection;
using System.Data;
namespace LibertyPortal.CommonTools.CustomHttpModules
{
class CustomHttpModules : IHttpModule
{
#region IHttpModule 成员
/// <summary>
/// 处置由实现 IHttpModule 的模块使用的资源(内存除外)。
/// </summary>
public void Dispose()
{
}
/// <summary>
/// 初始化模块,并使其为处理请求做好准备。
/// </summary>
/// <param name="context"></param>
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
context.EndRequest += new EventHandler(context_EndRequest);
context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
}
#endregion
/// <summary>
/// 在 ASP.NET 响应请求时作为 HTTP 执行管线链中的第一个事件发生。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
HttpResponse Response = context.Response;
//防止在Iframe的时间Cookie丢失
Response.AddHeader("P3P", "CP=CAO PSA OUR");
context.Response.Write("<h1><font color=red>HelloWorldModule: Beginning of Request</font></h1><hr>");
}
private void context_PreRequestHandlerExecute(Object source, EventArgs e)
{
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
System.Web.UI.Page p = context.Handler as System.Web.UI.Page;
PropertyInfo pi = p.GetType().GetProperty("dt");
DataTable dt = new DataTable();
pi.SetValue(p, dt, null);
object dd = pi.GetValue(p, null);
}
private void context_EndRequest(Object source, EventArgs e)
{
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
context.Response.Write("<hr><h1><font color=red>HelloWorldModule: End of Request</font></h1>");
}
}
}
页面:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Reflection;
public partial class HttpHandlerHttpModle_Default : System.Web.UI.Page
{
private DataTable _dt;
public DataTable dt
{
get
{
return _dt;
}
set
{
_dt = value;
}
}
protected void Page_Init(object sender, EventArgs e)
{
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
}
}
Webconfig
<httpModules>
<add name="CustomHttpModules" type="LibertyPortal.CommonTools.CustomHttpModules.CustomHttpModules,LibertyPortal.CommonTools"/>
</httpModules>