当前位置:编程学习 > C#/ASP.NET >>

ASP.NET2.0中如何实现局域网内设置IIS下的某文件夹不让用户直接通过URL访问,而是要通过身份验证进入主页后,才能下载文件?

看了 清清月儿 的《ASP.NET2.0雷霆之怒盗链者的祝福》的文章,按照文中的教导想实现:局域网内设置IIS下的某文件夹不让用户直接通过URL访问,而是要通过身份验证进入主页后,才能下载文件。
以下是我根据文章的指导进行操作,但最后输入 http://192.168.1.11/showbaobiao\1.rar 一样可以下载文件,而不是像文章所说的会跳转到WebForm1.aspx,在WebForm1.aspx页面中按下“下载”按钮才可以输出rar文件,请大家帮忙看看哪里出错了,谢谢!
1、首先创建一个类库项目myhandler.cs,后台的代码如下:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// myhandler 的摘要说明
/// </summary>
public class myhandler:IHttpHandler
{
public myhandler()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
    #region IHttpHandler 成员
    public void ProcessRequest(HttpContext context)
    {
        // 跳转到WebForm1.aspx,由WebForm1.aspx输出rar文件
        HttpResponse response = context.Response;
        response.Redirect("http://192.168.1.11/showbaobiao/WebForm1.aspx");
    }

    public bool IsReusable
    {
        get
        {
            // TODO:  添加 MyHandler.IsReusable getter 实现
            return true;
        }
    }
    #endregion

}
2、  在配置文件Web.config文件节点里增加如下节点:
    <httpHandlers>
      <add verb="*" path="*.rar" type="myhandler,App_Code"/>
    </httpHandlers>
3、在WebForm1.aspx里增加一个文本为“下载”的Button,其Click事件和后台的代码如下:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;

public partial class WebForm1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        FileInfo file = new System.IO.FileInfo(Server.MapPath("1.rar"));
        Response.Clear();
        Response.AddHeader("Content-Disposition", "filename=" + file.Name);
        Response.AddHeader("Content-Length", file.Length.ToString());
        string fileExtension = file.Extension;
        // 根据文件后缀指定文件的Mime类型

        switch (fileExtension)
        {
            case "mp3":
                Response.ContentType = "audio/mpeg3";
                break;
            case "mpeg":
                Response.ContentType = "video/mpeg";
                break;
            case "jpg":
                Response.ContentType = "image/jpeg";
                break;
            case "bmp":
                Response.ContentType = "image/bmp";
                break;
            case "gif":
                Response.ContentType = "image/gif";
                break;
            case "doc":
                Response.ContentType = "application/msword";
                break;
            case "css":
                Response.ContentType = "text/css";
                break;
            default:
                Response.ContentType = "application/octet-stream";
                break;
        } 
        Response.WriteFile(file.FullName);
        Response.End();
    }
}

4、  最后一步就是在IIS里增加一个应用程序扩展。在“默认网站”->“属性”->“主目录”->“配置”。在弹出的“应用程序配置”窗口里按“添加”,在弹出的“添加/编辑应用程序扩展名映射”窗口里“可执行文件”选择C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll,在扩展名里输入“.rar”,然后确定即可。
5、  在IE里输入http://localhost/shobaobiao/1.rar,会立即跳转到http://localhost/shobaobiao/WebForm1.aspx,然后按WebForm1.aspx的“下载”按钮就可以下载1.rar了。

但是,当易做图作到第五步时,在IE里输入http://localhost/shobaobiao/1.rar 并按回车键后,并没有跳转到http://localhost/shobaobiao/WebForm1.aspx页面,如何解决这个问题啊,请大家支招,谢谢! --------------------编程问答-------------------- 帮顶 --------------------编程问答-------------------- 已解决。
但是,这样的设置,对于用 迅雷 来下载文件,是起不到任何阻止作用的。如何更好地解决这个问题啊?? --------------------编程问答-------------------- 项目分开成俩个文件夹部署可防止下载 --------------------编程问答-------------------- 上楼朋友的言下之意是把下载的文件放在IIS之外的文件夹中?但把下载的文件放在IIS之外的文件夹中,有权限的用户又如何可以对文件进行下载或者打开浏览呢?谢谢!
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,