0

Я использую ASP.NET MVC5, и я хотел бы визуализировать представление из папки, находящейся вне папки приложения. Я попытался зарегистрировать собственный пользовательский VirtualPathProvider, и я даже создал свой собственный VirtualPathProviderViewEngine для поддержки рендеринга чистых html-страниц. Я работаю последним, но не могу заставить первого работать. Когда я перехожу к рассматриваемому маршруту, я хочу, чтобы MVC проверял внутреннюю папку Views для представления, а затем, если она не найдена, я хочу, чтобы она выглядела во внешней папке.Как я могу заставить MVC 5 визуализировать представление, физически находящееся за пределами папки веб-приложения?

Когда я просматриваю код, FileExists вызывается для файлов, находящихся в папке «Представления», а затем выполняется код ViewEngine, но для внешнего вида, который живет снаружи, проверяется проверка 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! Я верю, что понял. Я должен был создать свой виртуальный файл virtualpathprovider, virtualfile и виртуальный каталог и использовать описанные вами методы, чтобы загрузить содержимое файла, чтобы загрузить его, когда это необходимо. Хотя я не использовал приведенный выше пример, он выделил некоторые ключевые области, которые мне нужно было посмотреть, и я смог загрузить файл из папки вне моего приложения, как и ожидалось. Благодаря! – abraganza

 Смежные вопросы

  • Нет связанных вопросов^_^