巴布鱼——软件工程师的家园

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4851|回复: 0
打印 上一主题 下一主题

[C#] 使用HttpHandler实现图片防盗链

[复制链接]

40

主题

41

帖子

356

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
356
QQ
跳转到指定楼层
楼主
发表于 2015-5-5 15:02:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用httpHandle来实现,对图片文件的请求做专门的处理
第一步:创建一个类,继承自IHttpHandler,代码如下
  1. using System.Web;

  2. namespace CustomHandler{
  3.     public class JpgHandler : IHttpHandler{
  4.        public void ProcessRequest(HttpContext context){
  5.            // 获取文件服务器端物理路径
  6.            string FileName = context.Server.MapPath(context.Request.FilePath);
  7.            // 如果UrlReferrer为空,则显示一张默认的禁止盗链的图片
  8.            if (context.Request.UrlReferrer.Host == null){
  9.               context.Response.ContentType = "image/JPEG";
  10.               context.Response.WriteFile("/error.jpg");
  11.            }else{
  12.               // 如果 UrlReferrer中不包含自己站点主机域名,则显示一张默认的禁止盗链的图片
  13.               //string serverHost = context.Request.Url.Host;
  14.              //Uri u = context.Request.UrlReferrer;
  15.              //if (u == null || u.Host.ToLower() != serverHost.ToLower())
  16.              if (context.Request.UrlReferrer.Host.IndexOf("yourdomain.com") > 0){
  17.                   context.Response.ContentType = "image/JPEG";
  18.                   context.Response.WriteFile(FileName);
  19.               }else{
  20.                   context.Response.ContentType = "image/JPEG";
  21.                   context.Response.WriteFile("/error.jpg");
  22.               }
  23.            }
  24.        }

  25.        public bool IsReusable{
  26.            get{ return true; }
  27.        }
  28.     }
  29. }
复制代码
第二步:编译成DLL
第三步:添加编译好的DLL引用到当前站点的bin文件夹下
第四步:在Web.Config 中注册这个Handler
  1. <system.web>
  2.     <httpHandlers>
  3.       <add path="*.jpg,*.jpeg,*.gif,*.png,*.bmp" verb="*" type="CustomHandler.JpgHandler,CustomHandler" />
  4.     </httpHandlers>
  5. </system.web>
复制代码
//verb指的是请求此文件的方式,可以是post或get,用*代表所有访问方式。CustomHandler.JpgHandler表示命名空间和类名,CustomHandler表示程序集名。

如果发布网站的话,你会发现你的URL重写有可能会失效,如果失效的话就需要您设置一下IIS:
打开IIS,主目录-〉配置-〉映射-〉点击“插入”通配符应用程序映射-〉选择“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll”,然后把勾选去掉(一定要去掉),然后确定。
上面设置完毕之后,就可以正常浏览了。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|巴布鱼

GMT+8, 2024-4-25 14:24 , Processed in 0.092774 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表