3

Pro ASP.NET MVC 3のURLとルートの章を読んでいて、オブジェクトのデフォルトに空の値が含まれているとどうなるかを確認しようとしました。これが私が今持っているルートです。

routes.MapRoute("MyRoute", "{controller}/{action}", 
    new { controller="Home", action="Index" });

以下は、オブジェクトのデフォルトの値の可能な組み合わせで行った観察です。(いずれの場合も、太字のURLにはアクセスできません。

ケース1

new { controller="Home", action="Index" });
  1. http://mywebapp.net/
  2. http://mywebapp.net/Home/
  3. http://mywebapp.net/Home/Index/

ケース2

new { controller="Home", action="" });
  1. http://mywebapp.net/
    エラー:RouteDataには、空でない文字列値を持つ「action」という名前のアイテムが含まれている必要があります。
  2. http://mywebapp.net/Home/
    エラー:RouteDataには、空でない文字列値を持つ「action」という名前のアイテムが含まれている必要があります。
  3. http://mywebapp.net/Home/Index/

2番目のURLに関する上記のエラーは、ルーティングシステムがデフォルトのアクション名を見つけられなかったためです。

ケース3

new { controller="", action="" });
  1. http://mywebapp.net/
    エラー:値をnullまたは空にすることはできません。パラメーター名:controllerName
  2. http://mywebapp.net/Home/
    エラー:RouteDataには、空でない文字列値を持つ「action」という名前のアイテムが含まれている必要があります。
  3. http://mywebapp.net/Home/Index/

1番目と2番目のURLに関する上記のエラーは、ルーティングシステムがデフォルトのコントローラー名とアクション名をそれぞれ見つけることができなかったためです。

ケース4

new { controller="", action="Index" });
  1. http://mywebapp.net/
    エラー:値をnullまたは空にすることはできません。パラメーター名:controllerName
  2. http://mywebapp.net/Home/(これはどのようにそしてなぜアクセス可能ですか?)
  3. http://mywebapp.net/Home/Index/

ケース3controllerでとプロパティの両方actionが空の場合、期待どおりにエラーが発生しました。では、ケース4では、プロパティに空の値がある場合、2番目のURL http://mywebapp.net/Home/にどのようにアクセスできますか?controller

HomeControllerがすでに定義されており、ルーティングシステムが慣例によりそれを見つけたため、2番目のURLにアクセスできるのと同じくらい簡単ですか、それともこの動作の説明がありますか?これを変更して2番目のURLにアクセスできないようにすることはできますか、それとも設定より規約の原則に違反しますか?

4

1 に答える 1

4

Homeこれらをデフォルトとして指定しない限り、ハードコードされた規則ではありIndexません。ランタイムはそれらを見つけようとしません。

actionURLにパラメータの値が含まれておらず、actionデフォルトがないため、ケース2.1は機能しません。

URLにcontrollerパラメータの値が含まれておらず、controllerデフォルトがないため、ケース4.1は機能しません。

ルーティングの仕組みについて詳しく知りたい場合は、この投稿をお勧めします。

于 2012-07-01T17:54:21.707 に答える