Http Handler 和Http Module

关系图:

这里写图片描述

页面事件管道

这里写图片描述

For Http Module:

对于每个请求,所有的http模块都将通过。
如果有多个模块,执行顺序? 例如 :

模块A,订阅EndRequest

模块B,它订阅了BeginRequestEndRequest

模块C,订阅AuthenticateRequest

执行的顺序是:

模块B,BeginRequest

模块C,AuthenticateRequest

模块A,EndRequest

模块B,EndRequest

For Http Handler

对于每个请求,只有一个处理程序将被映射到执行一些逻辑,这取决于web.config中的配置。

配置:for http module :

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

配置:for http handler:

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

使用时机

Http Handler

每当想要处理一些请求,但不需要UI页面

Http Module

Authentication ,Application log , Auditing , URLRewriting

代码示例:

http module(使用 http module 重写url) :

public class UrlRewriterModule : IHttpModule  
    {  
        public void Dispose()  
        {  
            //清理代码在这里
        }  

        public void Init(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 void context_AuthorizeRequest(object sender, EventArgs e)  
        {  
        }  
        private void ContextOnBeginRequest(object sender, EventArgs eventArgs)  
        {  
            //测试URLrewritten  
            var context = ((HttpApplication)sender).Context;  
            if(context.Request.RawUrl.Contains("ExploreRedirect"))  
            {  
               context.RewritePath("ExploreRedirect.aspx","","SN="+ Guid.NewGuid());  
            }  
        }  
        private void ContextOnAuthenticateRequest(object sender, EventArgs eventArgs)  
        {  
        }  
        #endregion  
        #region AFTERhandler  
        private void ContextOnEndRequest(object sender, EventArgs eventArgs)  
        {  
        }  
        private void ContextOnPostRequestHandlerExecute(object sender, EventArgs eventArgs)  
        {  
        }  
        #endregion  
    }  

http handler:

    public class UrlRewriterHandler : IHttpAsyncHandler  
        {  
            public void ProcessRequest(HttpContext context)  
            {  
               //dosomething   
            }  

            private Action<HttpContext> _process;  
            public bool IsReusable { get; private set; }  

            public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, objectextraData)  
            {  
                _process =ProcessRequest;  
                return _process.BeginInvoke(context, cb, extraData);  
            }  

            public void EndProcessRequest(IAsyncResult result)  
            {  
               _process.EndInvoke(result);  
            }  
        }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值