Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net HttpApplication类和IHttpModule之间有什么区别?_Asp.net - Fatal编程技术网

Asp.net HttpApplication类和IHttpModule之间有什么区别?

Asp.net HttpApplication类和IHttpModule之间有什么区别?,asp.net,Asp.net,HttpApplication类和IHttpModule之间有什么区别?它们是相同的还是不同的 我看到一些文章在这两个类中都提到了相同的事件。除了HttpModules允许您从应用程序的其余部分删除或分离事件处理之外,没有什么大的区别。这有助于代码重用,尤其是跨应用程序的代码重用。 此外,使用此技术,您可以将HttpModules添加到应用程序中,而无需更改任何现有源代码(例如)以提供额外的功能。HttpApplication是一个web应用程序实例,其中注册了多个IHttpModule实例。这

HttpApplication类和IHttpModule之间有什么区别?它们是相同的还是不同的


我看到一些文章在这两个类中都提到了相同的事件。

除了HttpModules允许您从应用程序的其余部分删除或分离事件处理之外,没有什么大的区别。这有助于代码重用,尤其是跨应用程序的代码重用。

此外,使用此技术,您可以将HttpModules添加到应用程序中,而无需更改任何现有源代码(例如)以提供额外的功能。

HttpApplication
是一个web应用程序实例,其中注册了多个
IHttpModule
实例。这就是为什么每个
IHttpModule
实例处理应用程序执行的某一部分,因此通常可以在许多应用程序上重用(想想
Session
处理模块或身份验证模块)

在应用程序/请求处理方面有许多相似之处
HttpApplication
可以访问应用程序级事件,如OnStartOnEnd等,以及请求级事件,如OnBeginRequestOnEndRequest等。另一方面,
IHttpModule
只能访问请求级事件

其他注意事项:即使使用IHttpModule,也可以处理应用程序的启动和结束事件,但这是一项没有文档记录的功能,您必须采取一些特殊的预防措施。请查看以下两篇博文,这两篇博文深入地解释了这一切:

我建议您阅读一些关于应用程序生命周期执行管道的内容:


这篇好文章应该有助于您理解HttpModules和httpapplication是如何协同工作的。

IHttpModule是一个托管请求处理程序,这意味着为请求实现“捕获” 生命周期

HttpApplication表示Web服务器(IIS)ASP.NET应用程序。对,它有事件和其他 HTTP模块上下文中所需的成员

如果需要实现处理某些输入数据的自定义方式,可以开发HTTP模块 由某个HTTP请求提供。显然,这可能需要您访问HTTP应用程序,即 公开请求生命周期事件的一个

摘要是HTTP模块是HTTP应用程序的观察者,它可以实现逻辑以 以HTTP应用程序向ASP.NET基础结构的每个步骤发送信号的方式处理HTTP请求
生命周期。

+1我喜欢在每次尝试回答问题时学习新东西@钱丹·哈特瓦尼:什么?当我说
HttpApplication
处理应用程序级事件而
IHttpModule
实现处理请求级事件时,你不相信我的话当我使用这两种方法中的任何一种时?使用
IHttpModule
实现模块化和可重用的方法,使用
Global.asax.cs/vb
中的事件仅用于应用程序中的非模块化环王方法(一环控制它们)。有时,当您必须规则某些应用程序级别的事件时,除了在
Glogal.asax
codebeahind中编写处理程序外,别无选择。仅供参考,微软本身使用的模块化方法实际上符合。我倾向于遵循同样的模式,这使得维护更简单。罗伯特……以下是我所做的。我已经创建了一个BeginRequest处理程序,并且刚刚完成了一个Response.Write(“BeginRequestHandler”)。我在浏览器上看到输出,但没有应用于页面的级联样式表。我不明白为什么没有应用样式表!!你能给我推荐一篇好文章吗?这篇文章能帮助我更好地理解两者之间的区别。HTTP应用程序“是应用程序”(您的网站),而HTTP模块类似于“应用程序请求的处理器”:DASP.NET由Internet Information Server托管,这是一种在所有现代Windows中都存在的web服务器技术。网站所在的目录被标记为“应用程序”。该“应用程序”就是HttpApplication。但是您需要一些东西来处理HttpApplication发生的事情。例如,您想知道对您的网站的某个web请求是否具有加载某些数据的权限,您可以检查一些cookie并比较一些数据,以了解用户是否经过身份验证并具有某些内容的授权:这是由HttpModule完成的,它绑定到HttpApplication。相同的事件是,只要它们是请求级别的事件。但当它们是应用程序级事件时就不是了。