我正在阅读Pro ASP.NET MVC 3中的URL和Routes章节,并试图查看当对象默认值包含空值时会发生什么。这是我目前的路线。为什么空的controllerName属性在默认操作为空时工作?
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必须包含一个名为 '动作' 与非空字符串值项。 - 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必须包含一个名为“动作”与非空字符串值项。 - http://mywebapp.net/Home/Index/
与第一和第二的网址上述错误是因为路由系统无法找到各自默认的控制器和动作名字。
案例4
new { controller="", action="Index" });
- http://mywebapp.net/
错误:值不能为空。参数名称:controllerName - http://mywebapp.net/Home/(如何以及为什么可以访问?)
- http://mywebapp.net/Home/Index/
当两个controller
和action
性质案例3是空的,我果然收到错误。所以在案例4,当我有一个controller
属性的空值时,第二个URL如何得到http://mywebapp.net/Home/?
是否可以访问第二个URL,因为HomeController已经定义,路由系统是按照惯例找到的,或者是否存在对此行为的解释?这可以修改,让第二个网址无法访问或这违反了约定配置原则吗?
由于您已经指定了控制器并且已配置了默认操作,因此情况4.1可以正常工作。我更担心Case 2.1的工作原理,因为没有配置默认操作。 –
@RichardSzalay:谢谢你指出。我想我忽略了它。 **案例2.1也不起作用**。我更新了这个问题。 – Animesh