HttpHandler 与 HttpModule 的学习笔记

很久没从事WEB方面的开发了,但鉴于未来项目的必备性及社会发展的必然性使我不得不重拾这块,N多年前开发的ASP.NET时用自带控件为了功能而做项目,今天回头再做时发现这个框架也发生了很大变化,如MVC的出现,但总体来说,都是基于ASP.NET为核心的扩展,而这又不能不谈:HttpHandler 与 HttpModule。

以下内容为自己学习笔记,未按教程方式整理:

1、HttpHandler

    根据用户请求的Http或URL的Verb将传入的请求映射到相应的处理程序,可在配置文件的层次中配置此元素;

特别提示:add 添加的顺序是有影响的,并且不是继承的,如第一个页面是自已处理.html类型,则第二条将不再处理,除非第一个Handler中没有找到再匹配第二条。

<httpHandlers>
    <add path="/ajax/*/*" verb="*" type="MyMVC.ServiceHandlerFactory" validate="true"/>
    <add path="*.aspx" verb="*" type="MyMVC.MvcPageHandlerFactory, MyMVC" validate="true"/>
</httpHandlers>

 如上代码:

      path 表示路径或要处理的文件类型(扩展名);

      Verb 表示Http或URL的Get、Post 或所有(*);

      type 表示自己要映射到相应的应用程序,格式:“命名空间.类名(必须继承自IHttpHandler或IHttpHandlerFactory),程序集名称”;

      validate 表示是否实际请求到达前加载,若为False,则ASP.NET的请求到达之前将不尝试加载,这有可能延迟错误,但减少了启动时间

1.1 实现自已的Handler用IHttpHandler,代码如下:

public class MyHandler : IHttpHandler
{

   //获取一个值,指示其它请求是否可以使用IHttpHandler的实例
public bool IsReusable { get { throw new NotImplementedException(); } } public void ProcessRequest(HttpContext context) { throw new NotImplementedException(); } }

说明:

     一般情况下,IsReusable = true , ProcessRequest 为处理请求。

1.2 实现自已的Handler用IHttpHandlerFactory,代码如下:

public class My1Handler : IHttpHandlerFactory
{
    public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
    {
        throw new NotImplementedException();
    }

    public void ReleaseHandler(IHttpHandler handler)
    {
        throw new NotImplementedException();
    }
}

 

 

 

posted @ 2013-08-22 12:04  蜗牛跑步  阅读(215)  评论(0编辑  收藏  举报