代码改变世界

用HttpModule控制或修改页面。

  Ivony...  阅读(1448)  评论(2编辑  收藏  举报

最近无事写了一个HttpModule的抽象基类,从这个类继承的HttpModule就能直接对Page对象进行操作,只需要重写OnPrePageExecute方法,然后向该类提供的Page属性注册事件或者修改属性即可。

使用HttpModule是比页面基类更好的方法,更加灵活方便。


 1  /// <summary>
 2  /// 控制aspx页面的HttpModule通用基类
 3  /// </summary>

 4  public abstract class PageModule : IHttpModule
 5  {
 6
 7    private HttpApplication _application;
 8
 9    /// <summary>
10    /// 销毁PageModule实例。
11    /// </summary>

12    public void Dispose()
13    {
14    }

15
16    /// <summary>
17    /// 实现IHttpModule,初始化PageModule
18    /// </summary>
19    /// <param name="context">HttpApplication实例</param>

20    public void Init( HttpApplication context )
21    {
22      _application = context;
23
24      //_application.PostMapRequestHandler += new EventHandler( OnPostMapRequestHandler );
25      _application.PreRequestHandlerExecute += new EventHandler( OnPreRequestHandlerExecute );
26      _application.PostRequestHandlerExecute += new EventHandler( OnPostRequestHandlerExecute );
27
28    }

29
30
31    
32    private void OnPreRequestHandlerExecute( object sender, EventArgs e )
33    {
34      _page = Context.Handler as System.Web.UI.Page;
35
36      if ( _page != null )
37        OnPrePageExecute( sender, e );
38
39    }

40
41    /// <summary>
42    /// 当执行页面处理程序之前发生
43    /// </summary>
44    /// <param name="sender">事件源</param>
45    /// <param name="e">事件参数</param>

46    protected virtual void OnPrePageExecute( object sender, EventArgs e )
47    
48
49    }

50
51    
52    private void OnPostRequestHandlerExecute( object sender, EventArgs e )
53    {
54      if ( _page != null )
55        OnPostPageExecute( sender, e );
56    }

57
58    /// <summary>
59    /// 当执行页面处理程序执行完毕时发生
60    /// </summary>
61    /// <param name="sender">事件源</param>
62    /// <param name="e">事件参数</param>

63    protected virtual void OnPostPageExecute( object sender, EventArgs e )
64    {
65
66    }

67
68
69
70
71    private System.Web.UI.Page _page;
72
73    /// <summary>
74    /// 获取当前请求的页面对象
75    /// </summary>

76    protected System.Web.UI.Page Page
77    {
78      get return _page; }
79    }

80
81    /// <summary>
82    /// 获取当前的请求的Http上下文信息
83    /// </summary>

84    protected HttpContext Context
85    {
86      get return _application.Context; }
87    }

88
89    /// <summary>
90    /// 获取模块所在的HttpApplication实例
91    /// </summary>

92    protected HttpApplication ApplicationInstanse
93    {
94      get return _application; }
95    }

96
97  }

98
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
点击右上角即可分享
微信分享提示