管道处理模型-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处理的

浙公网安备 33010602011771号