【问题标题】:Mvc2 Controller not firing default action when url specifies only directory当 url 仅指定目录时,Mvc2 控制器不会触发默认操作
【发布时间】:2011-09-06 16:07:27
【问题描述】:

拥有一个带有默认路由的 MVC 2 应用:

routes.MapRoute(
  "Default",
  "{controller}/{action}/{id}",
  new { controller = "Home", action = "Index", id = "" }
);

这对我们拥有的所有东西都非常有用,除了一个控制器。当我们浏览到 url http://myserver/ThisOneController 时,它不会触发 Index 操作并给出 403.14 禁止错误。如果我浏览到 http://myserver/ThisOneController/Index 它工作正常!每个其他控制器都显示预期的行为。

有问题的控制器定义了一个索引操作方法,在 IIS 中查看该文件夹似乎与其他文件夹没有区别。它适用于我们的生产盒,但不适用于我们的测试盒......在我的一生中,我找不到这些盒子之间的任何区别。

有什么想法吗?

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-2


    【解决方案1】:

    Glimpse 添加到您的项目并检查正在使用的路由。然后,您可以确定问题出在您的 MVC 应用程序还是环境中。

    【讨论】:

      【解决方案2】:

      这是预期的行为。

      routes.MapRoute(
        "Default",
        "{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = "" }
      );
      

      上面的路由意味着,你期望一个控制器/动作/id,并且默认(当什么都没有提供时)是root/Home/Index/。因此,由于您提供了一个控制器,但没有任何操作,因此任何其他具有 url(如 root/diffController/)的控制器都不匹配。

      【讨论】:

      • -1 - 这不完全正确;即使提供了路由的某些部分,也会使用默认值,因此root/Home 将调用HomeController.Index 操作,root/Other 将调用OtherController.Index 操作。您可以创建一个简单的应用来确认这一点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 2013-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多