首页 新闻 会员 周边

自定义handler处理图片请求??

0
悬赏园豆:30 解决于 2017-03-31 12:22


想做一个防盗链的demo,查了一些资料,知道这个demo的要点是改变静态图片请求的默认处理方式(存在即返回),增加可编程性,通过代码控制逻辑判断是否为盗链,最后决定是否返回正确图片。

参考:http://www.mikesdotnetting.com/article/126/asp-net-mvc-prevent-image-leeching-with-a-custom-routehandler

这篇文章提到,如果被请求的图片存在磁盘上,那么会被立即返回,如果不存在磁盘上,会做路由匹配,这就是入口,所以我在首页将img标签的src属性指向磁盘不存在的文件夹上,

Index.cshtml:
<img src="~/Content/imagessss/a.png" />
指向不存在的文件夹imagessss

 

添加路由:
routes.Add("ImagesRoute", new Route("Content/imagessss/{filename}", new ImageRouteHandler()));

图片路由处理类ImageRouteHandler.cs:

    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return new ImageHandler(requestContext);
    }

 

实际处理类ImageHandler.cs就不贴出来了,要点是图片请求可以匹配到ImageRouteHandler.cs上。

疑问点:我尝试了好多遍,不管请求指向是否存在磁盘上,请求都不会进行路由匹配,除非我在web.config添加配置:runAllManagedModulesForAllRequests="true",并且设置RouteTable.Routes.RouteExistingFiles = true;,这两条必须都设置为true,图片请求才会有路由匹配,当然,不论请示指向的文件夹是否存在。这和参考文有较大出入了?前者通过请求的文件是否存在决定是否匹配路由,后者(我现在的方式)是产用一棒子方式,设置所有请求都通过路由匹配,问题出在哪儿???

没有多余的豆了,谢谢你的回答!!

问题补充:

mvc 版本号 5.2.3.0

qingYun的主页 qingYun | 初学一级 | 园豆:43
提问于:2016-10-17 15:26
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册