只要有人访问本网站,都要执行全局文件的Application_BeginRequest事件。因此我们可以防盗链。
示例要求:凡不是网站本机登录的都给客户端提示,用图片显示。
分析:由于网页在加载时不是一次性全部加载,如先加载网页,再加载相关的js文件,再加载图片等,因此在客户端上有个图片元素,在此事件中判断请求的类型是否为图片并且是否是以localhost登录的,如果不是就发送客户端的另个图片。
开发步骤:
1.在目录中放两个图片,一个图片为正常显示,另一个为禁用提示的图片
2.新建一HTML页面,它的源码为:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<img src="imgs/pic.jpg" />
</body>
</html>
3.添加Global.asax文件,写入以下内容
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState; namespace GlobalTest
{
public class Global : System.Web.HttpApplication
{ protected void Application_Start(object sender, EventArgs e)
{ } protected void Session_Start(object sender, EventArgs e)
{ } protected void Application_BeginRequest(object sender, EventArgs e)
{
if(HttpContext.Current.Request.Url.AbsolutePath.EndsWith(".jpg")&&HttpContext.Current.Request.UrlReferrer.Host!="localhost")
{
HttpContext.Current.Response.WriteFile(HttpContext.Current.Server.MapPath("~/imgs/forbid.png"));
HttpContext.Current.Response.End();
} } protected void Application_AuthenticateRequest(object sender, EventArgs e)
{ } protected void Application_Error(object sender, EventArgs e)
{ } protected void Session_End(object sender, EventArgs e)
{ } protected void Application_End(object sender, EventArgs e)
{ }
}
}
4.运行网页,用loaclhost显示为pic.jpg文件,如果在地址栏中改为127.0.0.1则会显示我们要的forbid.png文件,如下图