2010-09-11 56 views
2

我正在寻找一种方法来拦截ASP.NET处理管道,以便能够将事件处理程序注册到Page类中的所有事件。原因是,我需要维护一个组件的会话绑定实例,该实例需要通知所有重要的Page事件,从OnPreInit开始。拦截页面对象创建以挂起事件

应用程序中有任意数量的Page后代,这些不在我的控制之下。因此,我不能使用像使用单个自定义后代那样的方法来通知会话绑定组件,将其作为Web应用程序中所有页面的基类。

我不认为创建自定义IHttpHandlerIHttpModule实施将解决该问题。另请注意,我无法创建自定义HttpApplication后代。

+0

global.asax有什么问题? – spender 2010-09-11 21:20:36

+0

Global.asax不是我的。换句话说,我需要从外面进入管道。我想知道是否创建一个自定义HTTP模块('IHttpModule')并为'HttpApplication.PreRequestHandlerExecute'事件注册一个处理程序是正确的方式 - 也就是说'Page'实例是否已经可以通过'HttpContext'获得。 – 2010-09-11 21:24:21

回答

3

它不会是一个优雅的过程来执行您正在查看的内容,特别是如果您需要处理多个页面事件,但理论上完全可以从Global.asax内设置处理程序需要每一页。

这里的技巧是你的代码添加到在Global.asax在PreRequestHandlerExecute方法,从这里你可以访问HttpApplication对象,从那里可以访问该页面,然后注册您的活动。这个过程是必要的,因为为处理的每个页面创建新的页面实例。

现在,你所知道的其他选项更加优雅,但是这应该到达你需要的地方。我发现了一个有用的教程,尽管围绕着Themeing展示了整个过程here

编辑:

看到您的评论后,是的,你可以简单地做我上面的说明,在自定义HTTP模块。我链接的文章甚至显示你的过程:)

+0

是的,创建自定义HTTP模块似乎是正确的方法。在最初研究文档时,我没有清楚地看到它。谢谢。 – 2010-09-11 22:05:31

0

不知道更多关于你想要完成它真的听起来像你确实想创建一个http模块或处理程序。你可能想看看this question