比如:
若用户在地址栏里输入:http://www.mysite.com/source/1.rar
然后就得到了该资源,请问如何避免这样。1.rar在我的网站的目录下存放的。

解决方案 »

  1.   

    使用防盗链,通过HttpHandler拦截
      

  2.   


    Httphander 一般通过对比原始请求的地址和文件后缀名来处理,这里不能处理吧
      

  3.   


    创建一个类,继承IHttpHandler,就能实现功能了
      

  4.   


    创建一个类,继承IHttpHandler,就能实现功能了
      

  5.   

    写一个类,继承IHttpHandler并且加上下面的方法
    public void ProcessRequest (HttpContext context) {
         
            //请求的上一页面的(来源)
         string host= context.Request.UrlReferrer.Host;
            //当前请求的主机名称
         string host2= context.Request.Url.Host;
         
          if (host!=null && host==host2)
          {  
              //允许下载文件,
              context.Response.ContentType="rar";
              context.Response.WriteFile(context.Request.PhysicalPath);      }
          else
          {
              //转到错误页面
              context.Response.Redirect("~/ErrorPage.aspx");
          }
        }    public bool IsReusable {
            get {
                return false;
            }
        }
      

  6.   

    然后在web.cofig里加上
    <httpHandlers>
            <add verb="*" path="文件.rar" type="类名"/>
          </httpHandlers>
      

  7.   

    我仔细描述一下我的问题:
    根据用户输入的序列号,下载对应该序列号的版本(有三个版本都是.exe文件)
    假设一个用户输入的是一个合法的序列号,然后开始下载,针对该资源会有个连接:http://www.mysite.com/source/1.exe
    但是这个用户把这个连接拷贝给一个非法的用户,那么这个用户就不用输入序列号,直接在IE浏览器地址栏里输入该地址就能下载到了。
    我想做的就是要阻止这种行为。你上面说的,我还是没太明白,这样做就能防止我上面描述的行为发生吗???
    请指教 
      

  8.   

    其实最原始的判断盗链原理就是
    获取请求页的前一个url(this.Request.UrlReferrer),
    判断如果是本站的话就是站内的就是合法链接,
    10L的例子就是这样。
    如果再严格一点,判断登陆用户的session。
      

  9.   

    httpHandlers> 
            <add verb="*" path="文件.rar" type="类名"/> 
          </httpHandlers>
    path里就是你要控制的,用户下载的文件地址,如:path="source/1.exe,source/2.exe,可以有多个"
    type是你创建的那个类名
      

  10.   

    HttpHandle可以实现,你可以把资源都放到一个文件夹下面,对该文件路径下的所有http请求进行拦截。
      

  11.   

    在控制层前加一个过滤器
    所有不希望用户直接访问的后缀一律过滤或者放在不能通过请求访问的文件下面,tomcat的WEB-INF文件夹内容只能在服务端访问,不能通过浏览器请求访问到
      

  12.   

    感谢zhongruijie416 ,用你的方法,我已经做到了。