我正在阅读 Pro ASP.NET MVC 3 中的 URL 和 Routes 章节,并试图查看当对象默认值包含空值时会发生什么。这是我目前的路线。
routes.MapRoute("MyRoute", "{controller}/{action}",
new { controller="Home", action="Index" });
以下是我对对象默认值的可能组合所做的观察。(在每种情况下,BOLD 中的 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/
上述第二个 URL 的错误是因为路由系统找不到默认操作名称。
案例3
new { controller="", action="" });
- http://mywebapp.net/
错误:值不能为空或空。参数名称:controllerName - http://mywebapp.net/Home/
错误:RouteData 必须包含一个名为“action”的项目,其值为非空字符串。 - http://mywebapp.net/Home/Index/
上述第一个和第二个 URL 的错误是因为路由系统分别找不到默认控制器和操作名称。
案例4
new { controller="", action="Index" });
- http://mywebapp.net/
错误:值不能为空或空。参数名称:controllerName - http://mywebapp.net/Home/(如何以及为什么可以访问?)
- http://mywebapp.net/Home/Index/
当Case 3controller
中的和action
属性都为空时,我收到了预期的错误。所以在案例 4中,当我的属性值为空时,如何访问第二个 URL http://mywebapp.net/Home/?controller
它是否像第二个 URL 一样简单,因为已经定义了 HomeController 并且路由系统通过约定找到了它,或者对这种行为有一些解释?可以对此进行修改以使第二个 URL 不可访问,还是违反了约定优于配置的原则?