管道处理模型-HttpHandle

  在上一篇【管道处理模型-HttpModule】中提到,一个请求最终是交由HttpApplication处理,在HttpApplication里面有25个事件

  在.NET框架的默认Web.config文件下的<HttpHandlers>节点下,写明了各种后缀文件的处理方式,通过为MapRequestHandler事件添加动作从配置文件中确定处理的Handler。例如*.config是交由HttpForbiddenHandler处理,反编译查看原代码,直接返回一个403错误,路径是不被允许的,这也说明了为什么网站不能直接访问config后缀的文件

  我们也可以自己添加一个指定后缀文件的处理方式,然后在自己项目的web.config文件下的<system.webserver>节点下添加<handlers>节点

  基于httphandle的扩展,可以做防盗链应用:

  首先扩展一个自己的ImageHandler

  在配置文件中添加节点

  运行网站,当浏览器自发的请求图片的时候,比如img标签,在请求头会带有一个Referer:

  若我们直接请求图片,请求头不会带有Referer

注意:物理文件存在,就不用绕开路由,路由本身会检查;物理文件存在,则需要忽略路由。

例如前面提到的请求rtmp结尾的请求,则需要忽略,直接请求图片地址,则不需要,通过反编译查看源码可以看到:

 

【httphandler的使用场景】

单独对某一个特别的请求,比如特殊文件的在线浏览、避免实际文件的地址公开。

【MVC的处理Handler】

  任何一个请求最终都是由Handler处理的,但是MVC的处理Handler是怎么处理的?

  首先MVC与ASP.NET的管道模型是一样的,但是MVC扩展了一个UrlRoutingModule,对PostResolveRequestCache事件做了一个扩展动作,通过反编译源码可以看到,请求最终还是交由一个handler处理

通过HttpContext.Handler.GetType().FullName打印输出可以看到,是交由一个MvcHandler处理的

 

 

 

 

 

  

  

 

posted @ 2018-10-15 12:39  这个年纪的人  阅读(245)  评论(0)    收藏  举报