阻止MVC 3中的静态内容

时间:2011-06-21 17:05:08

标签: asp.net asp.net-mvc asp.net-mvc-3

防止用户在我的内容目录中下载特定文件的最佳方法是什么?

我应该将Web.config添加到/ Content,就像我已经在/ Views中一样?

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <system.web>
    <httpHandlers>
      <add path="SecretFolder/*" verb="*" type="System.Web.HttpNotFoundHandler" />
      <add path="SecretFile.pdf" verb="*" type="System.Web.HttpNotFoundHandler" />
    </httpHandlers>
  </system.web>

</configuration>

或者我应该创建自定义路由规则吗?

还是有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

这正是web.config中<authorization> element的用途。这将使您可以精确控制用户可以查看哪些文件。您可以根据需要提供尽可能少的控制。

<location path="SecretFolder">
  <system.web>
    <authorization>
      <allow roles="admin" />
      <deny users="*" />
    </authorization>
  </system.web>
</location>

但是,这假设您使用ASP.NET authorization实施IPrincipal,如果您需要对内容进行此类控制,我建议您这样做。

答案 1 :(得分:1)

基本上就像你上面一样 - 因为你没有其他途径可以通过控制器达到这个目标。从文件类型和结构来看,这似乎并非如此(关注的是你有两条路由转到同一个文件 - 并且在MVC中使用授权元素建议在MVC中专门用于这个原因)

您想要准确使用MVC已经使用的内容。 参见&#34; HttpNotFoundHandler&#34;的整合进入你的web.config(我知道..你已经拥有它): http://completedevelopment.blogspot.com/2011/06/using-views-outside-of-views-or-other.html

这就是您的/ Views文件夹中的内容已被阻止的方式 - 所以这已经是&#39; mvc-ish&#39;