ASP.NET MVCは、IIS7での明示的なファイルのルートのためのコントローラを使用していません

StackOverflow https://stackoverflow.com/questions/2541650

質問

を見つけてファイルを提供することをStaticResourceControllerを考えてみます。

私はStaticResourceControllerを使用して、このファイルに対する要求を処理する「favicon.icoを」の明示的なルートを設定しました。

routes.MapRoute(
        "favicon",
        "favicon.ico",
        new { controller = "StaticResource", action = "Get", file = "favicon.ico", area="root"},
        new[] { "Dimebrain.Mvc.Controllers" }
        );
HTTPのリクエストを行うときに、

でIIS6が期待される結果が発生します:// localhostを:8080 / favicon.icoを

私はIIS7 HTTPに展開するときに、残念ながら://localhost/favicon.ico のIISで生成された404を返します。 、おそらくそれは実際には存在しないWebルートフォルダにfavicon.icoを探しています。

私は、これは、それがマルチテナントとのfavicon.icoファイルを変更することができている、特に以来、私のアプリケーションのために良いことではないことをStaticResourceControllerに十分な出来事を持っています。私はすべての要求を処理し、RouteExistingFilesで無視ファイルのチェックにRouteCollectionをオーバーライドするために自分のWebサーバーモジュールを設定しています。

なぜUrlRoutingModuleはIIS7に私の方法で取得し、ディスクからの静的ファイルを提供迫られて(404)?

役に立ちましたか?

解決

は、この問題へのケース誰の実行では、溶液は、あなたがあなたの実際の静的なファイルがどこに住んで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}");

他のヒント

ダニエル・クレンナの答えにadiitionでは、system.webServerセクションでweb.confugファイルに追加する必要があります:

<modules runAllManagedModulesForAllRequests="true"/>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top