問題タブ [virtualpathprovider]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - HostingEnvironment.VirtualPathProvider.FileExists は、既存のファイルに対して false を返します
次のコードを使用して、仮想パスでファイルを読み込もうとしています
_SiteMapFileName
には「~/Content/en-US/MainMenu.sitemap」のようなものがあり、常に返されfalse
ます。
しかし、その仮想パスの URL ( http://www.local.mysite.com/Content/en-US/MainMenu.sitemap ) にアクセスすると、ファイルはブラウザーに正しく表示されます。
Content
は、私の Web サイトの下にある仮想ディレクトリであり、別の場所にある共有フォルダーを指しています。Windows エクスプローラーでその場所にアクセスすると、ファイルを正しく表示できます
サイトと仮想ディレクトリをネットワーク アカウントとして接続するように設定しました。
プロセス監視ツールを使用して問題があるかどうかを確認したところ、w3wp.exe がファイル \path\to\shared\location\Content\en-US\MainMenu.sitemapを作成しようとしているが、 ACCESS DENIEDになっていると表示されます。読み取り専用の場所なので問題ありません
この問題を解決する方法はありますか?
asp.net - カスタム VirtualPathProvider のトラブルシューティング
ASP.NET Web アプリケーション用にカスタマイズした VirtualPathProvider を作成しました。基本的に、「~/Storage」とサブディレクトリ内のすべての仮想ファイルを、ソリューションのディレクトリ以外のディレクトリにマップします。
コードの要点
私の場合VirtualRootPath = "~/Storage"
、それは設定可能です。
問題
IIS Express で Visual Studio を介してデバッグすると、仮想パスを解決するために必要な 2 つのパブリック メソッドが常に呼び出されるとは限りません。
- 呼び出す
http://localhost:7749/Storage
と、両方のメソッドでブレークポイントがトリガーされます。404 エラーが返されます。これは私にとって正しい行動です - 呼び出し
http://localhost:7749/Storage/ExistingFile.txt
てもデバッグはトリガーされず、別の 404 エラーが返されます。これは正しくありません
2 つの 404 エラーの違いは、ディレクトリを呼び出すと ASP.NETServer error in application '/'
が応答する ( ) のに対し、そのディレクトリ内のファイルを呼び出すと IIS 8.0 が応答する ( HTTP Error 404.0 - Not Found
) ことです。
質問
を に正しく登録したとしても、VirtualPathProvider
IIS HostingEnvironment
8.0 では ASP.NET パイプラインが HTTP 要求を処理しないため、正しく解決できないのはなぜですか?
回避策
VirtualPathProvider does not (quite) work in production on IIS 7.5を読んだ後、それが問題になる可能性があることに気付きましたWeb.config
。他の質問から判断すると、ASP.NET がそれらを仮想リソース、コントローラー、またはその他にマップするかどうかに関係なく、IIS は特定のファイル拡張子を個別に処理するようです。つまり、XML ファイル (おそらく JPEG ではない) を読み込もうとしていたので、IIS は ASP.NET を気にしませんでした。
回避策として、次の行をWeb.config
のsystem.webServer.handlers
セクションに追加しました:
ただし、この回避策は XML ファイルに対してのみ機能します。ストレージ ディレクトリの下のすべてのファイルに対して機能する永続的な修正を行うにはどうすればよいですか?
asp.net - SharePoint - VirtualPathProvider: FeatureReceiver 内に登録する
SharePoint 2010/2013 (サーバーおよびファウンデーション) の VirtualPathProvider を実装しようとしています。これまでのところSystem.Web.Hosting.VirtualPathProvider
、System.Web.Hosting.VirtualFile
とのサブクラスを実装しましSystem.Web.Hosting.VirtualDirectory
た。
FeatureReceiver
クラスで機能を使用して、新しい VPP を HostingEnvironment に登録したいと考えていました。しかし、私はラインを実装したので
HostingEnvironment.RegisterVirtualPathProvider(new MyVPProvider());
メソッドに追加するFeatureActivated
と、VisualStudio のデバッグ デプロイは次のエラーで失敗します。
Error occurred in deployment step 'Activate Features': Operation is not valid due to the current state of the object.
何が間違っているのかわかりません。FeatureReceiver
VPP を登録する場所が間違っているのではないでしょうか?
チュートリアルまたは例を既に Web で検索しましたが、適切なものが見つかりませんでした。SharePoint 用の VirtualPathProvider を開発する方法についてのヒントをいただければ幸いです。前もって感謝します。
--
ロバート・フォーゲル
c# - VirtualPathProvider のいくつかのメソッドをオーバーライドする
ASP.Net MVC Web アプリケーションのデフォルトで実装されているVirtualPathProviderを使用したいと考えています。
つまり、デフォルトの Asp.net VirtualPathProvider から独自の VirtualPathProvider を継承し、GetCacheKeyメソッドをオーバーライドするだけです。
私は何をすべきか?
誰でも助けることができますか?
乾杯