示例
以下示例代码演示如何防止非来自于 http://www.111com.net 的域名下载文件。
public class DownHandler : IHttpHandler
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
string server = string.Empty;
//获取外链主机(域名)名称
if (context.Request.UrlReferrer != null) { server = context.Request.UrlReferrer.Host; }
string domain = System.Configuration.ConfigurationManager.AppSettings["domain"].ToString();
FileInfo fileInfo = new FileInfo(context.Request.PhysicalPath); //获取访问文件的实际物理路径
if (server == domain) //比较是否是允许的域名
{
Debug.WriteLine(fileInfo.Extension);
down(context.Request.Path);
}
else
{
context.Response.Write(string.Format("",server,fileInfo.Name));
context.Response.End();
}
}
//流下载
public void down(string cc)
{
if (cc != "")
{
string path = System.Web.HttpContext.Current.Server.MapPath(cc);
System.IO.FileInfo file = new System.IO.FileInfo(path);
if (file.Exists)
{
System.Web.HttpContext.Current.Response.Clear();
//指定下载的文件名称
System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(file.Name, Encoding.UTF8).Replace("+", "%20"));
//文件大小
System.Web.HttpContext.Current.Response.AddHeader("Content-Length", file.Length.ToString());
//通用格式
System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
System.Web.HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
System.Web.HttpContext.Current.Response.Filter.Close();
System.Web.HttpContext.Current.Response.WriteFile(file.FullName);
System.Web.HttpContext.Current.Response.End();
}
else
{
System.Web.HttpContext.Current.Response.Write("文件不存在");
System.Web.HttpContext.Current.Response.End();
}
}
}
}
context.Request.UrlReferrer 是获取有关客户端上次请求的 URL 的信息,该请求链接到当前的 URL。
context.Request.UrlReferrer.Host 在这里是获取主机(客户端访问的域名)名称。
HttpUtility.UrlEncode(file.Name, Encoding.UTF8).Replace("+", "%20") 是对下载文件名称编码。UrlEncode编码后会把文件名中的空格转换中+(+转换为%2b),但是浏览器是不能理解加号为空格的,所以在浏览器下载得到的文件,空格就变成了加号。UrlEncode 之后, 将 "+" 替换成 "%20",因为浏览器将%20转换为空格。
允许下载文件的主机我们在web.config中配置:
注册HTTP处理程序
修改web.config配置文件
IIS6
IIS7
path="/uploadfiles/files/*.*" 表示只有这里目录里的所有文件才使用KnownWebHandler HTTP处理程序处理
通过设置web.config中的域名即可控制哪些域名是允许的,设置是否直接下载、是否允许盗链
敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载像素火影骨架佐助 (Perseverance Fire Shadow)手机版v1.16
下载要塞英雄 安卓版v33.20.0-39082670-Android
下载梦想城镇vivo最新版本 安卓版v12.0.1
梦想城镇vivo版是这款卡通风模拟经营类手游的渠道服版本,玩
怦然心动的瞬间 安卓版v1.0
怦然心动的瞬间是一款真人向的恋爱互动游戏,在游戏中玩家将扮演
曼尼汉堡店游戏 安卓版v1.0.3
曼尼汉堡店是一款非常好玩的精品恐怖类型冒险游戏,在这款游戏中
现代总统模拟器去广告版 安卓版v1.0.46
现代总统模拟器是一款休闲养成类游戏,可能对于不少的玩家来说都
现代总统模拟器付费完整版 安卓版v1.0.46
现代总统模拟器高级版在商店是需要付费的,相对于普通版本,高级