前一阶段用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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现