这个方法会收到文件的名称以及HttpContext。由此处,我们将清空响应缓冲区,设置一个新的头部,然后设置内容类型。最后,使用WriteFile方法输出该文件,最终用户会收到一个文件保存或打开窗口。
注意,使用WriteFile会输出ZIP 文件,而是要Response.Redirect则会把用户重定向到访问拒绝页面。使用这种技术的时候,聪明的用户可以绕过安全检查而直接导航至Download.ashx文件。但即使它们设法直接浏览到ZIP 文件,也会被FileDenialHandler处理程序重定向到访问拒绝页面。
注意这两种类型处理程序的区别,一个是可以放在外部组件中的标准C#(或者VB.NET)类,如果您需要编写可重用的处理程序的时候,这种类型比较理想,因为您可以把它们编译成一个动态链接库,并在不同的站点之间分享。当然,我们需要在web.config文件中对它们进行注册。对于ASHX类型的处理程序,可以像ASPX页面一样添加到站点中。事实上,我们可以使用其他技术来完成类似Download.ASHX的功能,但是ASHX处理程序是更加简洁的解决方案。
十、小结
使用ASP.NET保护文件下载的所有方法中,利用HTTP处理程序是最重要的一种。通过与其他技术相结合,我们不仅能够防止非授权用户下载文件,还能在处理用户下载文件试图时获得绝对控制权,希望本文的内容对您能够有所帮助。
您可能感兴趣的文章: