Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当默认操作为空时,为什么empty controllerName属性有效?_C#_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

C# 当默认操作为空时,为什么empty controllerName属性有效?

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

我正在阅读Pro ASP.NET MVC 3中的URL和路由一章,试图了解当对象默认值包含空值时会发生什么。这是我目前的路线

routes.MapRoute("MyRoute", "{controller}/{action}", 
    new { controller="Home", action="Index" });
以下是我对对象默认值的可能组合所做的观察。(在每种情况下,无法访问粗体URL。

案例1
  • 案例2
  • http://mywebapp.net/
    错误:RoutedData必须包含名为“action”的项,且该项的字符串值为非空
  • http://mywebapp.net/Home/
    错误:RoutedData必须包含名为“action”的项,且该项的字符串值为非空
  • 第二个URL的上述错误是因为路由系统找不到默认操作名称

    案例3
  • http://mywebapp.net/
    错误:值不能为null或空。参数名称:controllerName
  • http://mywebapp.net/Home/
    错误:RoutedData必须包含名为“action”的项,且该项的字符串值为非空
  • 上述第一个和第二个URL的错误是因为路由系统无法分别找到默认控制器和操作名称

    案例4
  • http://mywebapp.net/
    错误:值不能为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" });