我正在阅读Pro ASP.NET MVC 3中的URL和Routes章节,并试图了解当对象默认值包含空值时会发生什么。这是我目前的路线。
routes.MapRoute("MyRoute", "{controller}/{action}",
new { controller="Home", action="Index" });
以下是我使用对象默认值的可能组合进行的观察。 (在每种情况下,无法访问BOLD中的网址。)
new { controller="Home", action="Index" });
new { controller="Home", action="" });
第二个URL的上述错误是因为路由系统找不到默认操作名称。
new { controller="", action="" });
第一个和第二个URL的上述错误是因为路由系统无法分别找到默认控制器和操作名称。
new { controller="", action="Index" });
如果案例3 中的controller
和action
属性均为空,则表示我收到了错误消息。因此,在案例4 中,当controller
属性为空值时,第二个网址http://mywebapp.net/Home/如何可访问?
是否可以访问第二个URL这么简单,因为HomeController已经定义,路由系统是按照惯例找到它还是对这种行为有一些解释?是否可以对其进行修改以使第二个URL无法访问,或者这是否违反了配置约定原则?
答案 0 :(得分:4)
Home
和Index
不是硬编码约定,除非您将它们指定为默认值,运行时将不会尝试查找它们。
案例2.1不起作用,因为该URL未包含action
参数的值,并且没有action
默认值。
案例4.1不起作用,因为该URL未包含controller
参数的值,并且没有controller
默认值。
如果您想了解有关路由如何工作的更多详细信息,我建议this post。