エリアのAdminAreaRegistration.cs
ファイルではなく、global.asax
ファイルにエリアへのルート(Adminと呼ばれる)を登録する場合、AdminAreaRegistration.cs
ファイルを削除できない理由はありますか?それが欠落している場合、例外をスローするかもしれないいくつかの段階でそれを呼び出すかもしれないフレームワーク内の他のコードはありますか?xxxxxxxAreaRegistration.csを削除できますか?
コメントで尋ねたようフィリップハドンによってthis excellent postで強調されているように、ここでのglobal.asaxにエリアを登録するためのコードが
routes.MapRoute(
"AdminAreaRoute",
"Admin/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new string[] { "Payntbrush.Presentation.Demo.MVC3.Areas.Admin.Controllers" }
).DataTokens.Add("Area", "Admin");
routes.MapRoute(
"SiteAreaRoute",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { controller = "/|Home|Account" }, // Constraint's on the URL (second param above) {controller} segment
new string[] { "Payntbrush.Presentation.Demo.MVC3.Areas.Site.Controllers" }
).DataTokens.Add("Area", "Site");
あるキーは、DataTokensコレクションを使用しています。必要な数だけ追加することができますが、明示的に名前をつけた領域の後にルートサイト領域を配置して、{controller}/{action}/{id}
が他のマップルートより先にすべての要求をキャッチしないようにしてください。
これを達成するためのコードを追加しました。これはうまく動作しますが、私が見つけようとしているのは、MVC 3フレームワーク内に、xxxAreaRegistrationクラスをいくつかの段階で呼び出す可能性がある他のコードがあるかどうかです。削除した場合、null例外が発生します。 – Chris
Chrisさん、ここでの問題は、ルートを登録せずにそのエリアにアクセスしようとするとエラーになることです。あなたが登録している限り、あなたはそのエリアにアクセスする際に何らかのエラーを起こすべきではありません。これは、ネットが必要とする、または登録または登録されたルートを探す唯一の時間です。 – shenku
今は確認できませんが、先日、私はエリア内のAreaRegistrationファイルを削除し、global.asaxの "AdminAreaRoute"ルートに頼ってリクエストが正しくルーティングされました。私は次のチャンスをもう一度チェックします。 – Chris