0

この URL を使用する場合:

http://www.domain.com/Dashboard/Admin/Index

私のページは期待どおりに機能します。Dashboardは MVC エリア、Adminはコントローラー、Indexはビューです。

エリア名を削除すると、次のようになります。

http://www.domain.com/Admin/Index

次に、次のエラーが表示されます。

サーバーエラー

これは予想されることです。404じゃないの?

領域を指定しないのに、MVC がコントローラを見つけてビューを見つけようとするのはなぜですか?

エリアが含まれていないときに強制的に 404 を返すにはどうすればよいですか?

名前空間を変更しようとしましたが、違いはありません。

4

1 に答える 1

1

デフォルトでは、組み込みコントローラ ファクトリは、名前空間に関係なく、一致するコントローラのすべての実装を検索します。ビュー エンジンは、リクエストのコンテキストで関連付けられたビューを検索します (つまり、エリア ルートが一致しない場合、エリア内を検索しません)。つまり、「定義済み」の名前空間のみを検索するようにルート エンジンの定義を制限する必要があります。そうすると、404 がスローされます。

これは、MapRoute メソッドのオーバーロードを使用し、名前空間を渡すことによって実現されます。

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
    null, // object constraints
    new string[] { "Namespace.Application.Controllers" } // namespaces
);

同じ名前の複数のコントローラーでコントローラー ファクトリが何を行うかを実験的に確認するには、別の AdminController をルートの Controllers フォルダーに追加してから、同じ要求を実行してみてください。

于 2013-08-27T04:30:23.230 に答える