0

我正在使用ASP.NET MVC5,我想從應用程序文件夾之外的文件夾渲染視圖。我嘗試註冊自己的自定義VirtualPathProvider,甚至創建了自己的VirtualPathProviderViewEngine來支持呈現純html頁面。我有後者的工作,但不能讓前者工作。當我導航到有問題的路由時,我希望MVC檢查視圖的內部視圖文件夾,然後如果找不到,我希望它在外部文件夾中查找。我怎樣才能讓MVC 5呈現物理上位於Web應用程序文件夾之外的視圖?

當我單步執行代碼時,會調用FileExists來查找位於Views文件夾中的文件,然後運行ViewEngine代碼,但對於位於外部的View,將運行FileExists檢查,然後在屏幕上顯示404。它永遠不會進入ViewEngine代碼。我知道我錯過了一些簡單的東西。

我附上了示例文件夾結構的屏幕截圖。任何幫助將不勝感激。 FolderStructure

+0

我可能是錯的,但我認爲這是一個安全功能,防止惡意腳本的能夠在訪問任何服務器,而不是僅在應用程序的文件夾中。 – krillgar

+0

我明白了你的觀點,但我確定我可以訪問整個MVC堆棧,並且作爲應用程序的開發人員,我應該能夠在我選擇的位置查找特定文件。 – abraganza

+0

潛在的重複目標:http://stackoverflow.com/q/5788631/1195056 – krillgar

回答

3

可以覆蓋的VirtualPathProvider和VirtualFile 檢查此鏈接爲Example

+0

我已經試過了。 FileExists被調用,但GetFile永遠不會被調用。我什至超越了VirtualPathProviderViewEngine,但它不會在主文件夾外找到我的文件。我的文件位於文件系統中,而不是數據庫中,如您提供的示例中所述。我很感謝幫助。 – abraganza

+1

您必須在FileExists和GetFile中放入正確的邏輯,文件存在應將您的虛擬文件(定義爲視圖的字符串:)映射到現有文件。如果該映射存在,並且返回true,則Getfile應該從您需要的任何位置讀取視圖。 –

+0

感謝您的見解@ laurent-lequenne!我相信我明白了。我必須在虛擬路徑提供程序,虛擬文件​​和虛擬目錄上創建我的虛擬目錄,並使用您提到的方法來拉取文件內容以在需要時加載它。雖然我沒有使用上面的例子,但它確實突出了我需要查看的一些關鍵區域,並且我能夠根據預期從應用程序之外的文件夾加載文件。謝謝! – abraganza

相關問題