项目结构如下:
代码一:
ImageCalss 类
namespace 防盗链.Handler { public class ImageClass : IHttpHandler { public bool IsReusable { get { return false; } } //禁止盗链的图片 const string errImg = "/Content/Images/daolian.jpg"; public void ProcessRequest(HttpContext context) { //获取文件服务器物理地址 string fileName = context.Server.MapPath(context.Request.FilePath); //如果UrlReferrer为空,则显示一张默认的禁止盗链的图片 if (context.Request.UrlReferrer == null || context.Request.Url.Host == null) { context.Response.ContentType = "image/JPEG"; context.Response.WriteFile(context.Server.MapPath(errImg)); } else { if (context.Request.UrlReferrer.Host.IndexOf("www.testdao.com") > -1) { context.Response.ContentType = "image/JPEG"; context.Response.WriteFile(fileName); } else { context.Response.ContentType = "image/JPEG"; context.Response.WriteFile(context.Server.MapPath(errImg)); } } } } }
代码二:在Web.config中的<system.web>节点下加上这句话,用来指定当请求/Content/Images/文件夹下面的图片的时候,去动态的执行“Verb”指定的另一个执行类去处理.
<!-- HttpHandlers对请求的扩展名进行处理 --> <httpHandlers> <add path="/Content/Images/*.jpg,*.jpeg,*.gif,*.png,*.bmp" verb="*" type="防盗链.Handler.ImageClass,防盗链"/> </httpHandlers>
测试盗链效果如下 :
配置IIS,模拟一个上线发布的网站:如 ”http://www.testdao.com/Content/Images/tupian.jpg“, 能正常显示图片,因为是本网站。
如图:
如果不配置IIS,就相当于引入了”http://www.testdao.com“ 网站的图片,就会返回一个盗链图片的图片,
如图:
您的支持是我最大的动力,如果你觉得还可以,请您给个”推荐“!