使用URL中的绝对路径保护文件不被下载

时间:2012-06-25 15:19:24

标签: asp.net-mvc-3 iis

在我的MVC 3项目中,我在项目的根目录中有一个文件夹,用于存储一些SWF文件。问题是,当我点击浏览器地址栏中的网址时,例如

localhost:39217/Files/fg/f_l1.swf

显然我看到了下载对话框。有什么办法可以预防吗?换句话说,在加载DOM之后,该文件将在我的页面中可见,但如果我只是键入其URL,我不希望它被下载。我担心这两种情况在IIS中都是相同的。有任何想法吗 ?

1 个答案:

答案 0 :(得分:1)

我可以看到解决此问题的一种方法是不显示用户的真实物理路径。基本上,您应该从控制器操作传递SWF文件。

如果您通过object标签嵌入SWF文件,那么object标签将引用传递文件名的操作。您可以通过Authorize属性或其他方式控制操作,一旦您看到请求得到适当授权,您就可以将Flash文件写入响应中。

这个想法清楚地解释了here虽然代码在PHP中,但您可以将其迁移到MVC。

<强>更新

如果您不想更改SWF文件路径,则必须在Global.asax.cs中完成更多工作。

routes.IgnoreRoute("Javascript/{*catchall}");
routes.IgnoreRoute("Content/{*catchall}");
routes.IgnoreRoute("Scripts/{*catchall}");

routes.RouteExistingFiles = true;

routes.MapRoute("", "Files/Flash/{file}", new { controller = "File", action = "Flash" });

现在虽然有人试图直接访问SWF文件并知道路径,但请求由Flash控制器的File操作处理,您可以在那里进行必要的身份验证。在发回SWF之前检查。