2

ファイルを見つけて提供する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)から静的ファイルを強制的に提供するのはなぜですか?

4

2 に答える 2

1

他の誰かがこの問題に遭遇した場合の解決策は、実際の静的ファイルが存在するフォルダー内のリクエストを処理しないようにMVCに通知する必要があることです。

// Make sure MVC is handling every request for static files
routes.RouteExistingFiles = true;

// Don't process routes where actual static resources live
routes.IgnoreRoute("content/{*pathInfo}");
routes.IgnoreRoute("scripts/{*pathInfo}");
routes.IgnoreRoute("areas/admin/content/{*pathInfo}");
routes.IgnoreRoute("areas/admin/scripts/{*pathInfo}");
于 2010-09-24T04:52:44.863 に答える
1

Daniel Crennaの答えに加えて、system.webServerセクションにweb.confugファイルを追加する必要があります。

<modules runAllManagedModulesForAllRequests="true"/>
于 2013-03-13T11:14:23.810 に答える