アプリケーションで ASP.NET MVC を使用しています。
ユーザーは、ページに含めることで、独自の画像、スタイル、スクリプトを指定できます。
しかし、存在しないファイルへの URL を指定すると、ルーティング メカニズムは、画像やスタイルなどへの URL によってコントローラーとアクションを見つけようとします。
メソッド IgnoreRoute を追加し、ルーティングによって処理したくないすべての拡張機能を指定しました。
URL が「Views/...」で始まらない限り、正しく機能します。
この場合、URL がアプリケーションに渡され、アプリケーション内でエラー 404 が実行されます。
しかし、IIS でこのエラーを処理したいと考えています。
これは、空のプロジェクトでテストできます。このコードを Global.asax.cs ファイルに使用するだけです。
using System;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute(
"{*staticfile}",
new { staticfile = @".*\.(jpg|gif|jpeg|png|js|css|htm|html|htc)$" }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
void Application_Error(object sender, EventArgs e)
{
}
}
}
次に、このアプリケーションを IIS でホストする必要があります (たとえば、http://localhost/testmvc/)。
Application_Error メソッド内にブレークポイントを配置して、アプリケーション内でエラーがいつ実行されるかを確認できます
テスト URL を開きます:
http://localhost/testmvc/test.css
IIS がそのエラーを処理したことがわかります。
ここで、パスに「/Views/...」を含む別のテスト URL を開きます:
http://localhost/testmvc/Views/test.css
そして、ASP.NET によってエラーが処理されたことがわかります。
問題は、パスに「ビュー」を含む URL を処理しないように MVC に指示する設定が存在する可能性があることです。