2011-06-21 66 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'