ファイルを見つけて提供するStaticResourceControllerについて考えてみます。
StaticResourceControllerを使用してこのファイルのリクエストを処理する「favicon.ico」の明示的なルートを設定しました。
routes.MapRoute(
"favicon",
"favicon.ico",
new { controller = "StaticResource", action = "Get", file = "favicon.ico", area="root"},
new[] { "Dimebrain.Mvc.Controllers" }
);
IIS6では、http:// localhost:8080/favicon.icoをリクエストすると期待どおりの結果が得られます。
残念ながら、IIS7に展開すると、http://localhost/favicon.icoはIISで生成された404を返します。これは、おそらく、存在しないWebルートフォルダーでfavicon.icoを実際に検索しているためです。
StaticResourceControllerで十分なことが起こっているので、これは私のアプリケーションにとっては良いことではありません。特に、マルチテナントであり、favicon.icoファイルが変更される可能性があるためです。すべてのリクエストを処理し、RouteCollectionをオーバーライドしてRouteExistingFilesによるファイルチェックを無視するようにWebサーバーモジュールを設定しました。
UrlRoutingModuleがIIS7で邪魔になり、ディスク(404)から静的ファイルを強制的に提供するのはなぜですか?