0

ASP.NET MVC 2 フレームワークを使用した ASP.NET webapp があります。これにより、ユーザーはファイルをアップロード フォルダーにアップロードできます。この問題は、サブフォルダー内の画像が Web ブラウザーによってアクセスされるときに発生します。

http://mywebapp/uploads/image_gallery/sub_folder/image.jpg

アップロード フォルダーは静的であり、ユーザーが変更することはできませんが、その下にあるものはすべて変更できるようになっています。

上記の例では、w3wp.exe が sub_folder ディレクトリにハンドルを作成しているように見えるため (sysinternals によるプロセス エクスプローラーを使用)、image_gallery フォルダーがロックされます。sub_folder ディレクトリの名前を変更することはできますが、名前を変更した後もハンドルはそのままのように見えますが、親フォルダー (この場合は image_gallery) の名前を変更することはできません。

フォルダー内を参照して、他の画像やファイルなどを表示することはできますが、親フォルダーの名前を変更することはできません。

これは MVC 2 フレームワークを使用しているため、次のようにアップロード フォルダーを除外しました。

routes.IgnoreRoute("upload/{*pathInfo}");

global.asax に変換されるため、ASP.NET がこれらの画像を (MVC フレームワークの外部で) 直接提供していると想定しています。

私の質問は、IIS が特定のディレクトリにハンドルを設定したり、強制的にハンドルを削除したりするのを防ぐ方法はあるのでしょうか? ignoreroute が指定されていても、MVC 2 フレームワークは何かトリッキーなことをしていますか?

ヒントをお寄せいただきありがとうございます。

4

2 に答える 2

2

私は同じ問題を抱えていましたが、多くの調査の結果、犯人を見つけました:

Web.config

<configuration>
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true">

このオプションを設定すると(すべてのhttpモジュールが静的ファイルを含むすべてのファイルで実行されます)、falseに設定されました。

于 2015-05-09T12:26:52.050 に答える
0

ASP.NETは通常、ファイルシステムの変更を監視するため、ディレクトリハンドルがワーカープロセッサで作成されると思います-これにより、構成ファイル、新しいdllなどの変更/追加に応答できます.

ユーザーが Web サーバー上の物理ディレクトリ構造を制御できるという概念から移行することをお勧めします。通常、ユーザーが作成できるのは論理ディレクトリ構造ですが、物理構造はプログラム ロジックによって制御されます。ロジックは、ユーザーによって作成された論理構造と、Web サーバー上の実際の物理構造とのマッピングを格納します。

于 2011-06-23T04:28:21.477 に答える