HttpModuel与HttpHandler周期图
(该图片是从网上找的,如果侵犯了作者的权益,请您联系我)
对于HTTP请求来说,HttpModule是HTTP请求的必经之路,它可以在该HTTP请求传递到最终的请求处理中心(HttpHandler)之前做一些额外的工作,或在某些情况下终止满足一些条件的HTTP请求,从而起到一个过滤器的作用
HttpHandler是HTTP请求的处理中心,负责HTTP请求的具体工作
本次主要是使用HttpHandler对象实现防盗链功能
1)
新建两个项目:A、B
A项目防盗链 B项目盗链来实现对照效果
2)
在A项目中新建一个Web窗体并且添加一个Handler类
在Web窗体中放入四张图片
在Handler类中加入以下代码
public class PreventLink : IHttpHandler
{
public bool IsReusable
{
get { return true; }
}
void IHttpHandler.ProcessRequest(HttpContext context)
{
//获取上次请求的URL
Uri lastUrl = context.Request.UrlReferrer;
//获取本次请求的URL
Uri currentUrl = context.Request.Url;
//判断是否为盗链
if(lastUrl.Host!= currentUrl.Host || lastUrl.Port != currentUrl.Port)
{
//获取警告提示图片路径
string erroImgPath = context.Request.PhysicalApplicationPath + "images/wuhu.jpg";
//发送至客户端
context.Response.WriteFile(erroImgPath);
}
else
{
context.Response.WriteFile(context.Request.PhysicalPath);
}
}
}
注意要实现IHttpHandler接口
3)
在配置文件web.config中的configuration里加入以下代码
<system.webServer>
<handlers>
<add verb="*" path="images/*.jpg" type="WebApplication1.PreventLink" name="plink"/>
</handlers>
</system.webServer>
4)
在B项目中添加一个Web窗体,并向其中加入A项目中的图片链接
最后运行代码,结果如下
(A项目运行结果)
(B项目运行结果)