给自己的Web文件夹增加一个图片或其它文件认证
以前见很多网站,在他的网站上面,不论是图片还是软件都可以正常显示或者下载,可是就是不可以"盗版".如果一"盗版"就会显示该网站指定的登录或者错误页面。觉得很神奇的。
呵呵.现在我们来使用C#来实现这一功能,给自己的网站加上一把锁,让盗版者无处下手。
首先作的是在IIS中将要处理(暂且这样叫吧)的图片或者软件加入程序处理方式。比如我们要对jpg的图片处理
打开IIS,打开要处理网站的属性,在主目录中点击配置,在新出来的“应用程序配置”窗口中的“映射”选项卡上面添加应用程序扩展映射。可执行文件与.aspx的可执行文件一样,扩展名,改为“.jpg"(可以根据自己的需要,多添加几种,但要在后面的程序中,作出相应的处理)。动作也改为和.aspx一样。添加成功后,IIS中的设置就算是完成了。
第二步作的就是要写个DLL文件了。
新建一个类,这个类一定要实现接口IHttpHandler。其实也就一个方法,一个属性。
public class Class1:IHttpHandler
{
#region IHttpHandler 成员
public void ProcessRequest(HttpContext context)
{
string strFileName = context.Server.MapPath( context.Request.FilePath );
if( context.Request.ServerVariables["HTTP_REFERER"] == null )
{
context.Response.ContentType = "Image/Jpeg";
context.Response.WriteFile( "/no.jpeg" );
}
else if( context.Request.ServerVariables["HTTP_REFERER"].ToUpper().IndexOf(www.myWebSite.com) > 0 )
{
context.Response.ContentType = "Image/Jpeg";
context.Response.WriteFile( strFileName );
}
else
{
context.Response.ContentType = "Image/Jpeg";
context.Response.WriteFile( "/no.jpeg" );
}
}
public bool IsReusable
{
get
{
// TODO: 添加 MyClass.IsReusable getter 实现
return true;
}
}
#endregion
}
将这个类,编译成dll放在bin目录下。当然类也要有命名空间的。
第三步也就是最后一步,也是最关键的一步。
在Web.Config文件中增加一个新的节点(如果存在就修改了)
<httpHandlers>
<add verb="*" path="*.jpg" type="Class1,WebTestApp" /> //class1是指类名,webtestapp是指dll文件的名字
</httpHandlers>
这样,所有关于jpg的访问就都要经过此dll的处理了。如果合格就显示正常的文件,否则呢, 就会显示你指定的图片。
用同样的方法或者说是思路,可以举一反三,几乎将所有的图片,资源等文件一网打尽!!
参考文章:http://www.c-sharpcorner.com/UploadFile/Ashish1/CountImageRequestsvb11102005044741AM/CountImageRequestsvb.aspx?ArticleID=bc902a54-16bb-4614-ab35-e6bb2aef8ba9