包括以下几种情况
1. 使用 ASP.NET 来保护文件类型(绝对不允许用户下载/查看)
http://support.microsoft.com/kb/815152
默认状态下,ASP.NET 被配置以截获并停止在 ASP.NET 应用程序中使用的几种不同的文件类型的请求。这些文件类型是那些不会检索的用户。这些文件类型包括存储的应用程序和.cs 文件存储在应用程序的源代码的配置信息的.config 文件。
1)编辑在 Internet 服务管理器中的脚本映射
Microsoft Internet Information Services (IIS) 5.0 确定如何处理请求基于请求的文件扩展名的脚本映射。这些脚本映射会调整使用 Internet 服务管理器。对于 ASP.NET 可以阻止文件类型,您必须首先配置将这些请求转发到 ASP.NET 的 IIS 5.0。若要这样做,请按照下列步骤操作:
- 在任务栏上单击 开始、 指向 设置,然后单击 控制面板。
- 双击要打开 管理工具 文件夹,然后双击运行 Internet 服务管理器。
- 用鼠标右键单击虚拟服务器或虚拟文件夹包含在 ASP.NET 应用程序,然后单击 属性。
- 选择 主目录 或 目录 选项卡。如果尚未为虚拟的文件夹中创建应用程序,请单击在 应用程序设置 下的 创建。
- 在 应用程序设置,下单击 配置。
- 若要打算处理 ASP.NET 请求的 Aspnet_isapi.dll 文件的位置选择 .aspx 应用程序映射,然后单击 编辑。
- 在 添加/编辑应用程序扩展名映射,将出现对话框。在 可执行文件 字段中选择文本,然后按 CTRL + C 将文本复制到剪贴板上。
- 单击 取消 返回到 应用程序配置 对话框。
- 现在,添加每个扩展要阻止的 ASP.NET 的应用程序的映射。若要执行此操作单击 添加。然后,可执行文件 字段中,请按 CTRL + V 以粘贴 Aspnet_isapi.dll 文件的路径。
- 在 动作 部分中选择 全部动作 选项。验证已选中 脚本引擎 复选框未选中 检查如果文件存在 复选框。
- 单击 确定。
- 为每个文件扩展名,您要由 ASP.NET 处理后重复此过程。
2)配置文件类型所需的阻止
若要阻止为 ASP.NET 应用程序的其他文件类型,请按照下列步骤操作:
- 在文本编辑器 (如记事本) 打开 Web.config 文件。 在 Web.config 文件位于根目录下的您的 Web 应用程序。
- 在 Web.config 文件中添加该 <httphandlers> 该 <system.web> 下的配置元素 元素。
注意您必须将不复制该 <httphandlers> Machine.config 文件中的元素。您必须将不复制该 <httphandlers>原因 元素是的因为该 <httphandlers> 元素允许您在不完全重写 Machine.config 设置的情况下添加其他文件类型。 - 在该 <httphandlers> 元素,使用 <add> 子标记,以指定要被阻止的其他文件类型。 将 谓词 属性设置为等于 *。执行此操作时可以指定所有类型的 HTTP 请求将被都阻止。定义为通配符,它与您要阻止的文件类型相匹配的 path 属性。例如对于您可以指定 *.mdb。最后,将 类型 属性设置为 System.Web.HttpForbiddenHandler"。下面的代码示例演示如何在 Web.config 文件中配置"httpHandlers"部分:
<system.web> <httpHandlers> <add verb="*" path="*.mdb" type="System.Web.HttpForbiddenHandler" /> <add verb="*" path="*.csv" type="System.Web.HttpForbiddenHandler" /> <add verb="*" path="*.private" type="System.Web.HttpForbiddenHandler" /> </httpHandlers> </system.web>
- 将保存在 Web.config 文件。在 ASP.NET 应用程序会自动重新启动。
2. HOW TO:使用 Visual C# .NET 创建 ASP.NET HTTP 处理程序
http://support.microsoft.com/kb/308001
实现处理程序
- 打开 Microsoft Visual Studio .NET。 在 Visual C# .NET 中,新建一个名为 MyHandler 的类库项目。
- 设置一个对 System.Web.dll 程序集的引用。
- 将以下指令添加到该类中:
using System.Web;
- 重命名类 SyncHandler.cs,然后相应地更改类定义。
- 实现 IHttpHandler 接口。您的类定义应如下所示:
public class SyncHandler : IHttpHandler
- 实现 IHttpHandler 接口的 IsReusable 属性和 ProcessRequest 方法。因为这是一个同步处理程序,所以为 IsReusable 属性返回 False 以使该处理程序不共用。
public bool IsReusable { get {return false;} } public void ProcessRequest(HttpContext context) { context.Response.Write("Hello from custom handler."); }
- 编译项目。
部署处理程序
- 在 C:/Inetpub/Wwwroot 目录下新建一个名为 Handler 的目录。
- 在新创建的 Handler 目录下创建一个 Bin 子目录。结果形成的路径是 C:/Inetpub/Wwwroot/Handler/Bin。
- 将 MyHandler.dll 从项目的 Bin/Debug 目录复制到 C:/Inetpub/Wwwroot/Handler/Bin 目录。
- 按照下面的步骤将新的 Handler 目录标记为一个 Web 应用程序:
- 打开 Internet 服务管理器。
- 右键单击 Handler 目录,然后单击属性。
- 在目录选项卡上,单击创建。
- 按照下列步骤为该处理程序创建一个应用程序映射。对于此处理程序,为 *.sync 扩展名创建一个到 Aspnet_isapi.dll 文件的映射。每当请求 .sync 文件时,该请求就会被路由到 ASP.NET,由 ASP.NET 执行处理程序中的代码。
- 右键单击 Handler Web 应用程序,然后单击属性。
- 在目录选项卡上,单击配置。
- 单击添加以添加一个新映射。
- 在可执行文件文本框中,键入下面的路径:
C:/WINNT/Microsoft.NET/Framework/< 版本号 >/Aspnet_isapi.dll
- 在扩展名文本框中,键入 .sync。
- 确保清除了“检查文件是否存在”复选框,然后单击确定以关闭添加/编辑应用程序扩展名映射对话框。
- 单击确定以关闭应用程序配置和处理程序属性对话框。
- 关闭 Internet 服务管理器。
配置系统
- 在 C:/Inetpub/Wwwroot/Handler 目录下,新建一个名为 Web.config 的文件。
- 将下面的代码添加到 Web.config 中:
<configuration> <system.web> <httpHandlers> <add verb="*" path="*.sync" type="MyHandler.SyncHandler, MyHandler" /> </httpHandlers> </system.web> </configuration>
在 path="*.sync" 属性中,我们指示处理程序处理 .sync 文件的任何传入请求。
在 type="MyHandler.SyncHander, MyHandler" 属性中,我们指示处理请求的处理程序在 MyHandler.SyncHandler 名称空间实现,而此类则驻留在 MyHandler 程序集中。
测试模块
要测试处理程序,文件系统中不需要有一个页。例如,请求 Handler Web 应用程序中的 Default.sync 文件(http://< 计算机名 >/Handler/Default.sync)。您会看到下面的结果:
Hello from custom handler.
3.手动修改Page,不让用户看到URL而禁止Download.(如果用户知道URL,则仍然可以Download)..,
<
asp:LinkButton ID="btnReport" runat="server" OnClick="BtnReport_Click" Text="<%# ((DictionaryEntry)Container.DataItem).Key %>" />
LinkButton lb = (LinkButton) sender;
string filename = lb.Text;
string filepath = "..//" + ConfigurationManager.AppSettings["TemplateFolder"] + "//" + filename;
try
{
Response.ContentType =
"plain/text";
Response.AppendHeader(
"Content-Disposition", "attachment; filename=" + filename);
Response.TransmitFile(Server.MapPath(filepath));
Response.End();
}
catch {}