【问题标题】:.NET MVC3 routing - why so confusing?.NET MVC3 路由 - 为什么如此混乱?
【发布时间】:2012-07-09 20:30:52
【问题描述】:

我不知道为什么我一直在为此苦苦挣扎,但有人可以解释为什么这不起作用吗?

/ 重定向到home 控制器的index 操作。

/gallery/ 抛出 404 not found 错误。

/gallery/index 重定向到gallery 控制器的index 操作。

来自documentation

定义路由时,可以为参数分配默认值。如果 URL 中不包含该参数的值,则使用默认值。您可以通过将字典对象分配给 Route 类的 Defaults 属性来设置路由的默认值。

我不明白这怎么不符合这条规则:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute(
            "Default",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
        );
    }

对我来说是这样的:

  • 如果未定义controller,请使用Home
  • 如果未定义action,请使用Index
  • 输入的 URL 包含一个控制器 = gallery 和一个动作不包含在 URL 中,所以它应该转到 Index

我是否遗漏了某些东西,或者这是不必要的混乱和愚蠢?

我一直发现 MVC3 路由存在问题,但我接受了它。然后我开始使用 Rails 和 Node 框架,它们的路由非常简单,所以现在 .NET MVC 只是在它不起作用或让我使用复杂的模式时让我烦恼。

当我浏览到/gallery/index时,我的Gallery控制器、Action和View都已定义并工作,以供参考。

public class GalleryController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

【问题讨论】:

  • 澄清一下,你只定义了这1个路由,默认路由?在它之前没有声明其他路线,并且您没有使用区域?
  • 您在所有方面都是正确的。您是否添加了另一条路线?
  • 不,我故意贴出整个RegisterRoutes 方法以明确只有默认路由存在。
  • 这是在哪个 IIS 中运行的?
  • 内置VS2010虚拟服务器。

标签: asp.net-mvc-3 url-routing asp.net-mvc-routing


【解决方案1】:

您肯定做错了什么,或者您没有向我们展示某些代码。执行以下步骤:

  1. 使用默认向导创建一个新的 ASP.NET MVC 3 应用程序(Internet 应用程序
  2. HomeController.cs的内容替换为:

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return Content("home/index");
        }
    }
    
    public class GalleryController : Controller
    {
        public ActionResult Index()
        {
            return Content("gallery/index");
        }
    }
    
  3. 点击F5

会发生什么:

requested url    |   result
-----------------+---------------
/                |   home/index
/home            |   home/index
/home/           |   home/index
/home/index      |   home/index
/home/index/     |   home/index
/gallery         |   gallery/index
/gallery/        |   gallery/index
/gallery/index   |   gallery/index
/gallery/index/  |   gallery/index

完全符合预期,不是吗?

【讨论】:

  • 确实如您所演示的那样工作,现在我要做一个差异,看看与我的其他应用程序(这是一个空项目类型)有什么不同。
  • 嗯,这正式是那些愚蠢的开发人员时刻之一。为了对我提出的具体问题有一个具体的答案,我正在回答我自己的问题。感谢 Darin 的澄清,希望我能在这种情况下给予更多的支持。
【解决方案2】:

问题是我有一个隐藏目录(未包含在我的解决方案中),与我的错误路线同名:/gallery

幸运的是,我今天早上太累了,无法打我的显示器。

感谢大家的建议,所有 +1 的帮助指导。

PS。为了帮助我调查问题,我使用了Phil Haack's routing debugger

【讨论】:

  • 嘿,+1 因为没有攻击你可怜的手无寸铁的显示器:)
猜你喜欢
  • 2012-10-11
  • 2019-03-13
  • 1970-01-01
  • 2011-04-28
  • 2015-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多