パス情報に関係なく、.php または .cgi へのリクエストをブロックしたいと思います。
たとえば、次の URL が使用されている場合:
http:// mysite /Admin/Scripts/Setup.php
これは既存のルートと一致します。
routeCollection.MapRoute("Admin", "admin/{controller}/{action}/{uid}/{*pathInfo}", new { controller = "Admin", action = "Index", uid = "" });
ただし、スクリプト用のコントローラーがないため、MVC は次をスローします。
IControllerFactory '' は、'scripts' という名前のコントローラーのコントローラーを返しませんでした。
私が本当に望んでいるのは、MVC がコントローラーに到達する前に、要求が単純にハード フェイルで満たされることです。
Application_BeginRequest を Global.asax にフックし、新しい HttpException(404, "Not Found") をスローすることでこれを実行できることはわかっていますが、それは私が探しているエレガントなソリューションではありません。
私はこれがうまくいくことを本当に望んでいました:
routeCollection.IgnoreRoute("{resource}.php/{*pathInfo}");
しかし、そうではありません。
注: Sean Lynch の回答はうまく機能しますが、それでも System.Web.Routing または System.Web.Mvc ベースのソリューションが本当に必要です。そうすれば、ユーザーが実行時に独自の除外を追加できるようになります。