少し時間がかかりましたが、拡張機能を IIS 6 で機能させる方法を理解しました。まず、ASP.NET ISAPI フィルターを介してルーティングされるように、ベース ルーティングを作り直して .aspx を含める必要があります。
routes.MapRoute(
"Default", // Route name
"{controller}.aspx/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
たとえば、Home.aspx に移動すると、サイトは正常に動作するはずです。しかし、Default.aspx とhttp://[website]/の既定のページ アドレスは正しく機能しなくなります。それで、それはどのように修正されますか?
さて、2 番目のルートを定義する必要があります。残念ながら、ルートとして Default.aspx を使用すると、正しく機能しません。
routes.MapRoute(
"Default2", // Route name
"Default.aspx", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
では、これをどのように機能させるのですか?さて、これは元のルーティング コードが必要な場所です。
routes.MapRoute(
"Default2", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
これを行うと、Default.aspx とhttp://[website]/の両方が再び機能し始めます。これは、Home コントローラーに正常にマップされるためだと思います。したがって、完全な解決策は次のとおりです。
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}.aspx/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
routes.MapRoute(
"Default2", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
そして、サイトは IIS 6 で問題なく動作するはずです (少なくとも、私の PC では動作します)。
おまけとして、ページで Html.ActionLink() を使用している場合、サイト全体で他のコード行を変更する必要はありません。このメソッドは、コントローラーへの .aspx 拡張子の適切なタグ付けを処理します。