2011-08-23 187 views
4

我想阻止用戶訪問我的「〜/ Content/...」文件夾,我在「Global.asax.cs」中將其編寫爲如下所示,並將此行代碼放在每個其他路徑的頂部 routes.IgnoreRoute("Content/{*pathInfo}");
但它不起作用。實際上用戶可以通過在瀏覽器中鍵入URL來查看內容文件夾中的每個文件。 我錯過了什麼?爲什麼我的IgnoreRoute不起作用?

回答

4

你是怎麼知道它不起作用的?舉例說明。

您可能已將它放在路由表中。因此,請嘗試將其向上移動,以便將其添加到路由表的第一個。路線集合是路線的有序列表。

也試試這個:Routes.IgnoreRoute("Content/");,但你的版本忽略也是正確的,它應該工作。

最後,當你說用戶可以看到內容文件夾的所有內容時,我不知道你的意思:難道那不是重點嗎?用戶必須能夠從該文件夾下載文件,並且我們通常只需要MVC就可以忽略進入框架的請求,並且IIS可以直接提供這些文件。

或者您的意思是啓用了目錄瀏覽功能,並且您希望禁用該功能:在這種情況下,請轉到IIS管理器,然後選擇您的網站並查找目錄瀏覽選項並將其禁用,如here所示。

+0

我把它放在每一個其他路線的頂部(不起作用)並且寫下你建議的路線(不再工作)。通過「不起作用」我的意思是當使用在瀏覽器中輸入'/ Content/Site.css'時,我的CSS文件將顯示在瀏覽器中,並且我想忽略此行爲 – Rzassar

+0

@Rzassar如果您希望瀏覽器加載CSS並使用它來呈現你的頁面,你不能阻止用戶在瀏覽器中顯示CSS,這是根本不可能的... – Jon

+0

@Rzassar:在地址欄中輸入'/ Content/Site.css'並看到樣式表是正常的。它發生在互聯網上的每個**網站上,只需轉到任何網站並使用螢火蟲,找到其樣式表的鏈接並將其輸入到adderssbar並查看。 – Zasz

2

您的問題無法通過路由約束來解決。處理請求中有3個重要步驟:

  1. IIS獲得請求。
  2. IIS在文件系統中查看並搜索與文件的直接對應關係
  3. 如果IIS沒有找到任何文件 - 它向ASP.NET MVC提供處理請求。

因此,您需要將文件夾安全性配置爲禁止直接訪問文件,但允許訪問應用程序,如here。 但我不建議保護文件夾,應該共享。我不相信你的網站不應該有圖像顯示:)如果你有一些安全的內容,你需要創建另一個文件夾。

+0

你的意思是我不能忽略從my.css文件和其他圖像的訪問只是通過編寫一些'Routes.Ignore()'? – Rzassar

+1

我的意思是你應該分開你不希望用戶有能力下載的文件和用戶必須有能力下載的文件。您不能禁止未經授權的用戶「通過網址」下載圖像,並同時返回帶有「圖像」的用戶頁面,因爲此圖片瀏覽器也請求「通過網址」。 –

+0

好吧!但是我的css文件呢?它位於〜/ Content/Site.css,我想阻止這個文件被用戶看到。有沒有像使用IgnoreRoute()那樣簡單的解決方案,其他的「配置文件夾安全性」? – Rzassar