C# 当默认操作为空时,为什么empty controllerName属性有效?
我正在阅读Pro ASP.NET MVC 3中的URL和路由一章,试图了解当对象默认值包含空值时会发生什么。这是我目前的路线C# 当默认操作为空时,为什么empty controllerName属性有效?,c#,asp.net-mvc,asp.net-mvc-3,C#,Asp.net Mvc,Asp.net Mvc 3,我正在阅读Pro ASP.NET MVC 3中的URL和路由一章,试图了解当对象默认值包含空值时会发生什么。这是我目前的路线 routes.MapRoute("MyRoute", "{controller}/{action}", new { controller="Home", action="Index" }); 以下是我对对象默认值的可能组合所做的观察。(在每种情况下,无法访问粗体URL。) 案例1 案例2 http://mywebapp.net/ 错误:RoutedDat
routes.MapRoute("MyRoute", "{controller}/{action}",
new { controller="Home", action="Index" });
以下是我对对象默认值的可能组合所做的观察。(在每种情况下,无法访问粗体URL。)
案例1
案例2
错误:RoutedData必须包含名为“action”的项,且该项的字符串值为非空李>
错误:RoutedData必须包含名为“action”的项,且该项的字符串值为非空李>
错误:值不能为null或空。参数名称:controllerName
错误:RoutedData必须包含名为“action”的项,且该项的字符串值为非空
错误:值不能为null或空。参数名称:controllerName
当
控制器
和操作
属性在案例3中都为空时,我收到了预期的错误。因此,在案例4中,当控制器属性的值为空时,如何访问第二个URL
它是否像第二个URL那样简单,因为HomeController已经定义,路由系统按照约定找到它,或者对此行为有何解释?这是否可以修改为使第二个URL不可访问,或者这是否违反了配置原则的约定?Home
和Index
不是硬编码约定,除非您将它们指定为默认值,否则运行时不会尝试查找它们
案例2.1不起作用,因为URL不包含操作
参数的值,并且没有操作
默认值
案例4.1不起作用,因为URL不包含controller
参数的值,并且没有controller
默认值
如果您想了解有关路由工作原理的更多详细信息,我建议您使用。案例4.1的工作原理,因为您已经指定了控制器,并且配置了默认操作。我更关心的是案例2.1是否有效,因为没有配置默认操作。@RichardSzalay:谢谢你指出这一点。我想我忽略了它。案例2.1也不起作用。我更新了问题。谢谢你的回答。听起来并不傲慢,但我有点理解为什么2.1和4.1不起作用。对不起,我在问题中没有说清楚。我更想知道4.2是否仅仅因为Home controller位于预定义的位置而起作用,因为我没有指定默认控制器的名称。我忘了提到您的博客文章内容非常丰富。感谢您链接它。@Nanda 4.2之所以有效,是因为URL包含控制器
参数的值,并且操作
的默认值为非空。默认值仅在URL不包含参数值时使用。
new { controller="Home", action="Index" });
new { controller="Home", action="" });
new { controller="", action="" });
new { controller="", action="Index" });