Http Handler And Http Module

Http Module and Http Handler

 

. Relation

 


.Page Event Pipe

 


For Http Module:

 

  1. ·        for each request, all http modules will be go through .
  2. ·        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);
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值