搞了半天的结果。。
//system.web下
//HoWave.Web为项目名称,HandlePictrue为 实现类
<httpHandlers> <add verb="*" path="*.PHP" type="System.Web.UI.PageHandlerFactory" /> <!--不要被.net处理的类型--> <!--<add verb="*" path="*.html,*.jpg,*.jpeg,*.png,*.bmp,*.gif" type="System.Web.DefaultHttpHandler" />--> <!--要被.net处理的类型--> <add verb="*" path="*.jpg" type="HoWave.Web.HandlePictrue,HoWave.Web" /> <add verb="*" path="*.jpeg" type="HoWave.Web.HandlePictrue,HoWave.Web" /> <add verb="*" path="*.png" type="HoWave.Web.HandlePictrue,HoWave.Web" /> <add verb="*" path="*.bmp" type="HoWave.Web.HandlePictrue,HoWave.Web" /> <add verb="*" path="*.gif" type="HoWave.Web.HandlePictrue,HoWave.Web" /> </httpHandlers>
<system.webServer> <defaultDocument> <files> <add value="index.aspx" /> </files> </defaultDocument> <validation validateIntegratedModeConfiguration="false" /> <handlers> <add name=".net40_jpg_tg" path="*" verb="*" type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" preCondition="integratedMode" /> <add name=".net40_jpg_tpf" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:WindowsMicrosoft .NET Frameworkv4.0.30319aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="classicMode,runtimeVersionv4.0,bitness32" /> <add name=".net40_jpg" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:WindowsMicrosoft .net Frameworkv4.0.30319aspnet_isapi.dll" resourceType="Unspecified" preCondition="classicMode,runtimeVersionv4.0,bitness32" /> </handlers> <modules> <!--<add name="myHandlePictrue" type="HoWave.Web.HandlePictrue,HoWave.Web" preCondition="managedHandler" />--> </modules> <!--程序池要设置为“经典”模式--> </system.webServer>
.Net Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.IO;
namespace HoWave.Web
{
public class HandlePictrue:IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string requesthost = (context.Request.UrlReferrer == null ? "" : context.Request.UrlReferrer.Host);
string picturehost = context.Request.Url.Host;
string relationPath = context.Request.FilePath.ToLower();
if (relationPath.EndsWith(".jpg") || relationPath.EndsWith(".jpeg") || relationPath.EndsWith(".png") || relationPath.EndsWith(".bmp") || relationPath.EndsWith(".gif"))
{
context.Response.ContentType = "image/JPEG";
string absolutePath = context.Server.MapPath(context.Request.FilePath);
if (requesthost != picturehost)//盗链,返回提示图片
{
context.Response.WriteFile("/Img/linknotice/ImageForbiden.jpg");
}
else if (!File.Exists(absolutePath))//图片不存在,返回提示图片
{
context.Response.WriteFile("/Img/linknotice/ImageNotFound.jpg");
}
else
{
context.Response.WriteFile(relationPath);
}
}
//else context.RewritePath(relationPath);
}
public bool IsReusable
{
get { return true; }
}
}
}