using
System;
System.Web;
///
<summary>
ImageProtect 的摘要说明
</summary>
public
class
ImageProtect : IHttpHandler
{
ImageProtect()
{
//
TODO: 在此处添加构造函数逻辑
}
void
ProcessRequest(HttpContext context)
判断是否是本地引用,如果是则返回给客户端正确的图片,这里的判断就是用到了前面所述的http请求中所记路的参考页信息
此处使用了端口,仅用于
if
(context.Request.UrlReferrer.Host
==
"
localhost
&&
context.Request.UrlReferrer.Port
6999
)
{
设置客户端缓冲中文件过期时间为0,即立即过期。
context.Response.Expires
=
;
清空服务器端为此会话开辟的输出缓存
context.Response.Clear();
获得文件类型
context.Response.ContentType
image/jpeg
;
将请求文件写入到服务器端为此会话开辟的输出缓存中
context.Response.WriteFile(context.Request.PhysicalPath);
将服务器端为此会话开辟的输出缓存中的信息传送到客户端
context.Response.End();
}
else
如果不是本地引用,则属于盗链引用,返回给客户端错误的图片
将特殊的报告错误的图片文件写入到服务器端为此会话开辟的输出缓存中
context.Response.WriteFile(
~/images/error.jpg
);
context.Response.End();
bool
IsReusable
get
return
false
;
}
Web.Config
<
httpHandlers
>
add verb
*
path
*.jpg
type
ImageProtect
/>
</
2
.
#region
IHttpHandler 成员
IHttpHandler.IsReusable
{
true
; }
IHttpHandler.ProcessRequest(HttpContext context)
string
FileName
context.Server.MapPath(context.Request.FilePath);
null
)
image/JPEG
/no.jpg
);
(context.Request.UrlReferrer.Host.IndexOf(
mydomain.com
)
{
context.Response.ContentType
context.Response.WriteFile(FileName);
}
context.Response.WriteFile(
no/jpg
#endregion
编译成dll。
JpgHandler, MyDll
在IIS网站配置中把JPG映射到aspnet_isapi.dll