いくつかの MVC コンポーネントが追加された WebForms アプリケーションを使用しています。アイデアは、アプリの多くを MVC に移行することですが、一度に移行する方法はありません。さまざまな理由で制御できないため、ASP.Net 2.0 と MVC 2.0 を使用する必要があります。これらは組み込みで出荷されるためです。IIS 6 と IIS 7 もサポートする必要があります。
まず、拡張機能のないルーティングの問題をよく認識しており、それを使用しようとはしていないため、ワイルドカード マッピングなどの問題はありません。最初にルートを使用しようとしました ala "{controller}.aspx/{action}/ {id}」ですが、頭を壁にぶつけた後、「{controller}.mvc/{action}/{id}」に切り替えましたが、同じ問題が発生しています。
第 2 に、開発マシンの IIS 7 統合モードでも、クラシック モードや IIS 6 はもちろんのこと、これを機能させることができません。Cassini ではすべて正常に動作しますが、IIS 7 に展開すると MVC コンポーネントが壊れます。これは私の開発マシン上にあるため、ASP.Net が IIS に正しく登録されていることがわかり、コントロール パネルで継承されたすべての HTTP ハンドラーを確認できます (例: ASPX は PageHandlerFactory にマップされます)。
症状:
すべての ASPX WebForms リクエストは完全に機能します。
アクション/ID が指定されていないコントローラーのみに対する MVC 要求は、MVC にルーティングされ、適切に実行されます。
アクションまたは ID を含む MVC ルートへのリクエストは、すぐに 404 を返します。IIS は、".mvc" 拡張子がフォルダー パスの一部であると認識しているかのように、HTTP ハンドラーを無視して 404 を返します。
つまり、/app/WebForm.aspx
- HTTP 200 OK、WebForm.aspx.cs 分離コードを実行
/app/Fancy.mvc - HTTP 200 OK、/Controllers/FancyController.cs、インデックス メソッド
/app/Fancy を実行します。 mvc/DoThingy - FancyController に DoThingy メソッドがあるにもかかわらず、HTTP 404 NOT FOUND
悪い解決策: runAllManagedModulesForAllRequests を設定するなどのことを試しましたが、パフォーマンスが悪いだけでなく、Web フォームも壊れます。.ASPX を含むすべてのルートを無視するように設定しても、それらは壊れます。
ワイルドカード マッピングを使用できないため、役に立ちません。
その他の詳細: HTTP ハンドラーを web.config/system.WebServer にセットアップしました。リストの最初のハンドラーです。
<add name="MvcRoutingHandler" preCondition="integratedMode" verb="*" path="*.mvc" type="System.Web.Routing.UrlRoutingHandler, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" resourceType="Unspecified" />
どのハンドラーを指定したか、どのオプションを指定したかは問題ではないようです。IIS は、この構成のいずれも調べていないようです (パスの Fancy.mvc 部分がディレクトリ名であると考えているように見えるため、そうではありません)。 t がそのディレクトリを見つけたら、保釈します)。
私のルート:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
routes.IgnoreRoute("{resource}.asmx/{*pathInfo}");
routes.IgnoreRoute("{resource}.aspq/{*pathInfo}");
routes.IgnoreRoute("{resource}.svc/{*pathInfo}");
routes.MapRoute("Default",
"{controller}.mvc/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
更新: IIS 7 クラシック モードを使用してみました。次に、asp_net ISAPI dll を指す IIS マネージャーに .mvc マッピングを追加し、同じ結果を得ました。