Pro ASP.NET MVC 3のURLとルートの章を読んでいて、オブジェクトのデフォルトに空の値が含まれているとどうなるかを確認しようとしました。これが私が今持っているルートです。
routes.MapRoute("MyRoute", "{controller}/{action}",
new { controller="Home", action="Index" });
以下は、オブジェクトのデフォルトの値の可能な組み合わせで行った観察です。(いずれの場合も、太字のURLにはアクセスできません。)
ケース1
new { controller="Home", action="Index" });
ケース2
new { controller="Home", action="" });
- http://mywebapp.net/
エラー:RouteDataには、空でない文字列値を持つ「action」という名前のアイテムが含まれている必要があります。 - http://mywebapp.net/Home/
エラー:RouteDataには、空でない文字列値を持つ「action」という名前のアイテムが含まれている必要があります。 - http://mywebapp.net/Home/Index/
2番目のURLに関する上記のエラーは、ルーティングシステムがデフォルトのアクション名を見つけられなかったためです。
ケース3
new { controller="", action="" });
- http://mywebapp.net/
エラー:値をnullまたは空にすることはできません。パラメーター名:controllerName - http://mywebapp.net/Home/
エラー:RouteDataには、空でない文字列値を持つ「action」という名前のアイテムが含まれている必要があります。 - http://mywebapp.net/Home/Index/
1番目と2番目のURLに関する上記のエラーは、ルーティングシステムがデフォルトのコントローラー名とアクション名をそれぞれ見つけることができなかったためです。
ケース4
new { controller="", action="Index" });
- http://mywebapp.net/
エラー:値をnullまたは空にすることはできません。パラメーター名:controllerName - http://mywebapp.net/Home/(これはどのようにそしてなぜアクセス可能ですか?)
- http://mywebapp.net/Home/Index/
ケース3controller
でとプロパティの両方action
が空の場合、期待どおりにエラーが発生しました。では、ケース4では、プロパティに空の値がある場合、2番目のURL http://mywebapp.net/Home/にどのようにアクセスできますか?controller
HomeControllerがすでに定義されており、ルーティングシステムが慣例によりそれを見つけたため、2番目のURLにアクセスできるのと同じくらい簡単ですか、それともこの動作の説明がありますか?これを変更して2番目のURLにアクセスできないようにすることはできますか、それとも設定より規約の原則に違反しますか?