0

この SO の回答に基づいて: https://stackoverflow.com/a/2066040/458354サブディレクトリ内のすべてのファイルに対してカスタム HttpHandler を定義する web.config があり、静的ファイル サブディレクトリに配置されます。仮想として構成されている場合でも、ディレクトリが IIS と同じサーバー上にある場合、これは完全に機能します。ただし、仮想ディレクトリが別のサーバー上の共有フォルダーを指している場合、静的リソースにアクセスすると、次のエラーが表示されます: 「構成ファイルの読み込み中にエラーが発生しました: ファイル監視のファイル名が無効です: '\\remoteserver\remotedir\web.構成」。

リモート ディレクトリのアクセス許可を Web サーバーから IIS_IUSR に付与しました。問題は、構成パスが共有であることだと思います。IIS が仮想ディレクトリ web.config を読み取れるようにする方法について何か考えはありますか?

または、サイトの通常の web.config でハンドラー パスを構成して、サブディレクトリ全体をカバーする方法はありますか?

問題の構成行:

<add name="MyRequestHandler" type="MyApp.StaticFileRequestHandler,
MyApp" path="*" resourceType="Either" verb="GET,HEAD"
requireAccess="Read"/>
4

1 に答える 1

0

カスタム IHttpHandler が仮想ディレクトリから読み取ろうとすると、401 Unauthorizedを参照してください。ApplicationPool ID を、リモート仮想ディレクトリへの接続に使用されるのと同じ ID に設定します (たとえば、サービス アカウントなど)。

また、サブディレクトリに Handler を割り当てる別の方法に関しては、(MVC ではなく) asp.net ルーティングを使用するようにアプリケーションの設計を変更し、URL 要求で目的の静的ファイルを識別子で指定するようにしました (これは必ずしもそうとは限りません)。望ましいものですが、アプリケーションランドスケープの他の場所ではすでに既存の慣行でした)。これにより、ハンドラをプログラムで割り当てることができるため、仮想ディレクトリに子 web.config が不要になります。

public static void RegisterRoutes(RouteCollection routes)
{
    // fileId must be all digits, with at least one digit
    var routeConstraints = new RouteValueDictionary { { "fileId", @"\d{1,}" } };
    var getProtectedFileRoute = new Route("resources/files/{fileId}", new MyFileRequestRouteHandler())
    {
        Constraints = routeConstraints
    };
    routes.Add(getProtectedFileRoute);
}

識別子はワイルドカードではなく、RouteDataパラメーターです。(識別子が「ドット」と拡張子を持つファイル名である場合、これが機能するかどうかはわかりません...)。

于 2013-01-25T17:40:43.597 に答える