.net学习图片防盗链
2013-11-14 16:22
211 查看
代码实现如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// <summary>
///全局处理程序
///1、新建类,实现IHttpHandler
///2、实现相应的功能
///3、配置web.config
<httpHandlers>
<!-- type="命名空间.类名,程序集的名字"-->
<add verb="*"《请求类型 get post》 path="img/*.jpg" 《那个路径下的图片》 type="DaoLian"《类名》/>
</httpHandlers>
/// </summary>
public class DaoLian:IHttpHandler
{
public bool IsReusable
{
get { return false; }
}
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/jpeg";
//当前请求
Uri u1 = context.Request.Url;
//上一次请求
Uri u2 = context.Request.UrlReferrer;
//比较域名和端口是否一致
if (CompareUrl(u1, u2))
{
//正常的请求
string path = context.Request.RawUrl;
path = context.Request.MapPath(path);
context.Response.WriteFile(path);
}
else
{
//盗链的请求
//相对路径 相对于浏览器当前请求的文件
string path = context.Request.MapPath("daolian.jpg");
context.Response.WriteFile(path);
}
}
//比较两个uri的域名和端口是否相等
bool CompareUrl(Uri u1, Uri u2)
{
return Uri.Compare(u1, u2, UriComponents.HostAndPort, UriFormat.SafeUnescaped, StringComparison.CurrentCultureIgnoreCase) == 0;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// <summary>
///全局处理程序
///1、新建类,实现IHttpHandler
///2、实现相应的功能
///3、配置web.config
<httpHandlers>
<!-- type="命名空间.类名,程序集的名字"-->
<add verb="*"《请求类型 get post》 path="img/*.jpg" 《那个路径下的图片》 type="DaoLian"《类名》/>
</httpHandlers>
/// </summary>
public class DaoLian:IHttpHandler
{
public bool IsReusable
{
get { return false; }
}
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/jpeg";
//当前请求
Uri u1 = context.Request.Url;
//上一次请求
Uri u2 = context.Request.UrlReferrer;
//比较域名和端口是否一致
if (CompareUrl(u1, u2))
{
//正常的请求
string path = context.Request.RawUrl;
path = context.Request.MapPath(path);
context.Response.WriteFile(path);
}
else
{
//盗链的请求
//相对路径 相对于浏览器当前请求的文件
string path = context.Request.MapPath("daolian.jpg");
context.Response.WriteFile(path);
}
}
//比较两个uri的域名和端口是否相等
bool CompareUrl(Uri u1, Uri u2)
{
return Uri.Compare(u1, u2, UriComponents.HostAndPort, UriFormat.SafeUnescaped, StringComparison.CurrentCultureIgnoreCase) == 0;
}
}
相关文章推荐
- VS2008远程调试
- codeforces-363A. Soroban
- django验证吗记录
- VC2005调试: DLL调试, 远程调试;
- ubuntu ufw 防火墙
- Linux中Kill进程的N种方法
- 黑马程序员-javaSE学习之语言基础细节详解
- UIDynamicAnimator
- EF在单例模式及C/S方式开发时,操作数据对象以后如果发生异常,要做善后工作。
- centos5.5安装zabbix2.0.9
- java练习 jtable增加删除
- Linux性能监控:/proc/loadavg
- SmartFoxServer项目总结
- Android TextWatcher监控EditText中的输入内容并限制其输入字符个数
- 关于ora-04065和ora-04068的原理解释
- 对Ron Eglash在Ted演讲上提到的Bamana沙地符号的想法
- Spring MVC 对于@ModelAttribute 、@SessionAttributes 的详细处理流程
- $.ajx的用法
- ngx-push-stream模块源码学习(五)——内存清理
- 编写一个程序,实现单链表的各种基本运算