防止用户在我的内容目录中下载特定文件的最佳方法是什么?
我应该将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>
或者我应该创建自定义路由规则吗?
还是有更好的方法吗?
答案 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;