1

いくつかの 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 マッピングを追加し、同じ結果を得ました。

4

1 に答える 1

1

これは URL の問題であることがわかりました... URL はアプリ ディレクトリではなく、サイトのルートに送信されていました。最初から確認しておくべきでした。これが問題だとは思いませんでした。なぜなら、手動でアドレス バーに URL を入力すると、インデックスでは機能しましたが、アクション メソッドには HttpPost が必要だったため、スクリプトと手動で入力したアドレスが吐き出された要因の組み合わせだったからです。同じエラーメッセージ。

WebForms と MVC を混在させている人は、URL が正しいことを 2 回、3 回確認してください。クライアント側の JS が MVC 要求をルーティングする場所を認識できるように、WebForms マスター ページで現在使用しているコードを次に示します。

string baseUrl =  Request.Url.GetLeftPart(UriPartial.Authority);
if (baseUrl.EndsWith("/")) baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
baseUrl = baseUrl + ResolveUrl("~/");
Page.ClientScript.RegisterHiddenField("BaseUrl", baseUrl);
于 2012-08-02T21:01:25.480 に答える