您的位置:首页 > 理论基础 > 计算机网络

Http Handler And Http Module

2013-09-19 14:55 405 查看

Http Module and Http Handler

 

. Relation

 


.Page Event Pipe

 


For Http Module:

 

·        for each request,
all http modules will be go through .
·        if have multiple modules ,execute order ?  for example :

 

Module A, which subscribes toEndRequest

Module B, which subscribes toBeginRequest and EndRequest

Module C, which subscribes toAuthenticateRequest

The order of execution will be:

 

Module B, BeginRequest

Module C, AuthenticateRequest

Module A, EndRequest

Module B, EndRequest

 


For Http Handler

 

for each request , only ONE handler will be mapped to do some logic, depending on the configuration in web.config.

 

.configuration :

 

for http module :

 

<system.webServer>
<modules>
<addname="urlRewrittingModule"type="WebCode.asp.net.HttpModule.UrlRewriterModule"/>
</modules>
</system.webServer>


 

for http handler:

 

 

<system.webServer>
<handlers>
<addverb="*" name="urlRewritingHandler" path="*.aspx"type="WebCode.asp.net.HttpHandler.UrlRewriterHandler"/>
</handlers>
</system.webServer>


 

when use

 

Http Handler

Whenever want to handle some request but no need the UI page

 

Http Module

Authentication ,Application  log , Auditing , URLRewriting

 

code example :

 

http module(using http module to rewrite url) :

 

public class UrlRewriterModule : IHttpModule
{
public voidDispose()
{
//clean-upcode here.
}

public voidInit(HttpApplication context)
{
context.AuthenticateRequest += ContextOnAuthenticateRequest;
context.BeginRequest += ContextOnBeginRequest;
context.AuthorizeRequest += context_AuthorizeRequest;
context.PreRequestHandlerExecute += ContextOnPreRequestHandlerExecute;
context.PostRequestHandlerExecute += ContextOnPostRequestHandlerExecute;
context.EndRequest += ContextOnEndRequest;
}

#region BEFOREhandler
private void ContextOnPreRequestHandlerExecute(objectsender, EventArgs eventArgs)
{
}
private voidcontext_AuthorizeRequest(object sender, EventArgs e)
{
}
private voidContextOnBeginRequest(object sender, EventArgs eventArgs)
{
//test URLrewritten
varcontext = ((HttpApplication)sender).Context;
if(context.Request.RawUrl.Contains("ExploreRedirect"))
{
context.RewritePath("ExploreRedirect.aspx","","SN="+ Guid.NewGuid());
}
}
private voidContextOnAuthenticateRequest(object sender, EventArgs eventArgs)
{
}
#endregion
#region AFTERhandler
private voidContextOnEndRequest(object sender, EventArgs eventArgs)
{
}
private voidContextOnPostRequestHandlerExecute(object sender, EventArgs eventArgs)
{
}
#endregion
}


 

http handler:

 

  

public classUrlRewriterHandler : IHttpAsyncHandler
{
public voidProcessRequest(HttpContext context)
{
//dosomething

}

privateAction<HttpContext> _process;
public boolIsReusable { get; private set; }

publicIAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, objectextraData)
{
_process =ProcessRequest;
return_process.BeginInvoke(context, cb, extraData);
}

public voidEndProcessRequest(IAsyncResult result)
{
_process.EndInvoke(result);
}
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: