C#ASP.NET HttpModules:HttpApplication事件

时间:2009-08-16 08:40:17

标签: c# asp.net httpmodule httpapplication

我的Web应用程序中有一个HttpApplication(Global.asax),我使用它来捕获和记录未处理的异常并设置WebFormURLRouting。这一切都有效,但我想将此代码移到我的应用程序框架中(即不在Global.asax.cs中)

我刚刚尝试在框架中创建一个HttpApplication类,但似乎我无法覆盖事件?无论如何,我相信我可以使用HttpModule代替使用这些事件,这样做:

1)完全消除对Global.asax的需求?

2)这种效果如何扩展,即最终在Web场上运行应用程序

3)我有HttpHandlers来处理文件上传和文件下载等其他内容,是否应该使用多少HttpModule / HttpHandler,或者是否应该以某种方式组合以减少开销?

赞赏任何评论

2 个答案:

答案 0 :(得分:3)

在HTTP模块中监听您从Global.asax中了解的事件,就像在模块的Init方法中连接到HttpApplication实例的事件一样简单。你不能覆盖HttpApplication的方法,你应该听它的事件。

至于你的其他问题: 1)是的,在我的许多Web项目中,我们不使用Global.asax

2)这实际上不会影响扩展。对于服务器场中的每个Web服务器,您需要正确连接HTTPModule。但是因为这是在web.config中完成的,所以它应该已经存在了。

3)简答:否。对于httphandlers,它们是根据传入的http请求文件扩展名和/或路径和HTTP方法选择和运行的。在选择特定处理程序成为性能问题之前,您确实需要很多。对于HttpModules,您可以选择在每个请求中运行一些代码,显然,如果该代码需要时间运行,则会影响性能。但是,您的代码需要花费时间,而不是通过http模块运行它。

答案 1 :(得分:1)

您可以在框架中创建Application类,并在每个应用程序中从继承创建。所以你将拥有框架中的所有句柄 答案:

  1. 您可以避免使用Application类,但添加处理程序不是一个好主意。
  2. 处理程序数量一般不影响可扩展性。但影响可维护性
  3. 因#2而保持处理程序数量较少。