0

私はASP.NET MVC5を使用しています。私はアプリケーションフォルダの外にあるフォルダからビューをレンダリングしたいと思います。 VirtualPathProviderのカスタムを登録しようとしましたが、純粋なhtmlページのレンダリングをサポートするためにVirtualPathProviderViewEngineを作成しました。私は後者の作業をしていますが、前者を動作させることはできません。問題のルートに移動すると、MVCはビューの内部Viewsフォルダをチェックし、見つからない場合は外部フォルダを探します。実際にWebアプリケーションフォルダの外にあるビューをMVC 5でレンダリングするにはどうすればよいですか?

コードをステップ実行すると、Viewsフォルダにあるファイルに対してFileExistsが呼び出され、ViewEngineコードが実行されますが、外部に存在するViewに対してFileExistsチェックが実行され、画面に404が表示されます。それはViewEngineコードに入ることはありません。私はここで単純なものが欠けていることを知っています。

サンプルフォルダ構造のスクリーンショットを添付しています。どんな助けでも大歓迎です。 FolderStructure

+0

ため、このリンクVirtualPathProviderとVirtualFile チェックをオーバーライドすることができますが、私は上で何にアクセスできることから悪意のあるスクリプトを防止するセキュリティ機能であるとして、これを見ることができましたサーバーではなく、アプリケーションのフォルダ内でのみ使用できます。 – krillgar

+0

私はあなたの要点を見ていますが、私はMVCスタック全体にアクセスできると確信しています。また、アプリケーションの開発者として、自分が選んだ場所にある特定のファイルを探す能力が必要です。 – abraganza

+0

潜在的な重複ターゲット:http://stackoverflow.com/q/5788631/1195056 – krillgar

答えて

3

あなたは、私が間違っている可能性がありExample

+0

私はすでにこれを試しました。 FileExistsは呼び出されますが、GetFileは決して呼び出されません。私もVirtualPathProviderViewEngineをオーバーロードしますが、それはメインフォルダの外で私のファイルを見つけることはありません。私のファイルは、あなたが指定した例のように、データベースではなくファイルシステム上にあります。私は援助に感謝します。 – abraganza

+1

FileExistsとGetFileに正しいロジックを入れなければならない場合、fileexistsは仮想ファイル(ビューとして定義された文字列:)を既存のファイルにマップする必要があります。マップが存在し、trueを返す場合、Getfileは必要な場所からビューを読み込む必要があります。 –

+0

洞察@ laurent-lequenneありがとう!私はそれが分かったと信じています。私はvirtualpathprovider、仮想ファイル、仮想ディレクトリを作成し、必要に応じてロードするためにファイルの内容をプルするために上記の方法を使用しなければなりませんでした。上記の例は使用しませんでしたが、見たいと思っていたいくつかの重要な要素を強調し、アプリケーションの外にあるフォルダからファイルを読み込むことができました。ありがとう! – abraganza

関連する問題