2011-06-21 62 views
0

阻止用户下载我的内容目录中的特定文件的最佳方法是什么?阻止MVC中的静态内容3

我应该添加一个Web.config到/内容,就像我已经在/视图?

<?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> 

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

或者还有更好的方法吗?

回答

1

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

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

然而,这种假设你正在使用IPrincipal,而如果你需要这种控制权的内容,我会建议实施ASP.NET authorization

+0

我目前没有授权设置,所以这将比仅仅放在web.config中做更多的工作。有没有性能的原因,这可能是更好的? – MikeWyatt

+1

作为一种常用方法 - 因为您可以拥有多个条目,因此网上的大部分阅读建议不要在MVC应用程序中使用Authorization元素(用于Web表单的很好的方法)。是的 - 在这种情况下,它可能工作得很好,但是可能你会开始混合身份验证。类型在应用程序中(因为此方法不建议与[Authorize]元素一起使用 –

1

基本上和上面一样 - 只要你没有另一条通过控制器访问的路线。从文件类型和结构来看,这似乎并不是这种情况(关心的是你有两条路径进入同一个文件 - 并且在web.config中使用授权元素在MVC中被推荐反对,因为这个原因)

您想正确使用MVC已经使用的内容。 见“HttpNotFoundHandler”整合到你的web.config在(我知道..你已经拥有它): http://completedevelopment.blogspot.com/2011/06/using-views-outside-of-views-or-other.html

这是你/浏览文件夹的内容如何内部已经封锁 - 所以这已经是“ mvc-ish'