自定义HtppHandler和HttpModule
HttpModule对象是指一个实现IHttpModule接口的类。在Asp.net模型中,在每一个请求和响应过程中,asp.net运行时将调用所有已经注册的HttpModule对象进行处理。HttpModule对象可以更改请求,例如将请求的URL引向另一个资源,也可以在响应中额外添加信息。
IHttpModule接口定义为:
<system.web>
<httpModules>
<add name="AppendMessageMoudle" type="AppendMessageModule,App_Code"/>
</httpModules>
</system.web>
以上的例子配置了一个ApplendMessageModule的HttpModule,该类的源码放在应用程序的App_Code目录下,如果将HttpModule类编译成独立的Assembly,则应将"App_Code"修改成相应的Assembly名称。下面是AppendMessageModule类的代码
Imports Microsoft.VisualBasic
![](/Images/OutliningIndicators/None.gif)
Public Class AppendMessageModule
Implements IHttpModule
![](/Images/OutliningIndicators/InBlock.gif)
Private WithEvents mApplication As HttpApplication
![](/Images/OutliningIndicators/InBlock.gif)
Public Sub Dispose() Implements System.Web.IHttpModule.Dispose
![](/Images/OutliningIndicators/InBlock.gif)
End Sub
![](/Images/OutliningIndicators/InBlock.gif)
Public Sub Init(ByVal context As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init
mApplication = context
End Sub
![](/Images/OutliningIndicators/InBlock.gif)
''' <summary>
''' 在发送实际的内容之前引发事件
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub mApplication_PreSendRequestContent(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles mApplication.PreSendRequestContent
![](/Images/OutliningIndicators/InBlock.gif)
Dim message As String = _
"<!--这些信息是自动添加的。 -->"
mApplication.Context.Response.Output.Write(message)
![](/Images/OutliningIndicators/InBlock.gif)
End Sub
End Class
HttpApplicatoin类中的事件说明请参考帮助文档。
HttpHandler是一个实现了IHttpHandler接口的对象。在Asp.net的模型中它将对特定请求进行处理。它的接口定义如下:
ReadOnly Property IsReusable() As Boolean
Sub ProcessRequest(ByVal context As System.Web.HttpContext)
IsReusable属性用于指示HttpHandler对象实例是否可以继续使用。
ProcessRequest用于返回相应的请求。
事实上Page类也实现了IHttpHandler接口。
定义IHttpHandler类的方式为:单击"网站-添加新项-一般处理程序",这样项目中将添加一个扩展名为*.ashx的文件。通过在ProcessRequest方法中返回相应的内容来实现对请求的处理。下面是一个简单的例子,这个例子返回了一张图片:
context.Response.ContextType="image/jpeg"
context.Response.WriteFile("sample.jpg")
也可以通过请求的查询参数来返回不同的图片,甚至这些图片可以是保存在数据库中,或者是根据参数来动态生成的(GDI+绘制)。
也可以不使用.ashx文件名,而是通过在<HttpHandlers>配置节中添加相应配置来启用HttpHander,配置的方式和HttpModule相似。
IHttpModule接口定义为:
1
sub Init(byval context as HttpApplication)
2
sub Dispose()
主要的处理工作将在Init方法和context对象的事件中处理。要使用HttpModule必须在Web.config进行相应的配置:![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
HttpHandler是一个实现了IHttpHandler接口的对象。在Asp.net的模型中它将对特定请求进行处理。它的接口定义如下:
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
ProcessRequest用于返回相应的请求。
事实上Page类也实现了IHttpHandler接口。
定义IHttpHandler类的方式为:单击"网站-添加新项-一般处理程序",这样项目中将添加一个扩展名为*.ashx的文件。通过在ProcessRequest方法中返回相应的内容来实现对请求的处理。下面是一个简单的例子,这个例子返回了一张图片:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
也可以不使用.ashx文件名,而是通过在<HttpHandlers>配置节中添加相应配置来启用HttpHander,配置的方式和HttpModule相似。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步