今天利用IHttpHandler做图片防盗链功能的时候,当我们访问的图片路径存在时候会走IHttpHandler进行处理,当我们访问的图片路径不存在时候,会匹配到mvc路由进入控制器工厂并且创建控制器,但是因为是静态文件,所以控制器工厂的 controllerType参数为null,导致创建控制器失败,返回500错误,正常来说请求静态文件不应该去创建控制器的。
原因是我们没有忽略这种带文件后缀的请求!
解决方案,添加一个带文件后缀的忽略路由:
//忽略 json,html,js,css,jpg文件
routes.IgnoreRoute("{*pathInfo}", new { pathInfo = @".+(.json|.html|.js|.css|.jpg)" });