Asp.net mvc 3 .NET MVC3路由-为什么如此混乱?

Asp.net mvc 3 .NET MVC3路由-为什么如此混乱?,asp.net-mvc-3,url-routing,asp.net-mvc-routing,Asp.net Mvc 3,Url Routing,Asp.net Mvc Routing,我不知道为什么我一直在努力解决这个问题,但有人能解释一下为什么这不起作用吗 /重定向到主页控制器的索引操作 /gallery/抛出404未找到错误 /gallery/index重定向到gallery控制器的index操作 从: 定义管线时,可以为参数指定默认值。如果URL中未包含该参数的值,则使用默认值。通过将dictionary对象指定给route类的Defaults属性,可以设置路由的默认值 我不明白为什么这不符合规则: public static void RegisterRout

我不知道为什么我一直在努力解决这个问题,但有人能解释一下为什么这不起作用吗

/
重定向到
主页
控制器的
索引
操作

/gallery/
抛出404未找到错误

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

从:

定义管线时,可以为参数指定默认值。如果URL中未包含该参数的值,则使用默认值。通过将dictionary对象指定给route类的Defaults属性,可以设置路由的默认值

我不明白为什么这不符合规则:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute(
            "Default",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
        );
    }
对我来说,它是这样的:

  • 如果未定义
    控制器
    ,请使用
    Home
  • 如果未定义
    操作
    ,请使用
    索引
  • 输入的URL包含一个控制器=
    gallery
    ,并且URL中不包含一个操作,因此它应该转到
    索引
我是否遗漏了一些东西,或者这是不必要的困惑和愚蠢

我总是发现MVC3路由有问题,但我接受了它。然后我开始玩Rails和Node框架,它们的路由非常简单,所以现在.NETMVC不起作用或者让我使用复杂的模式,这让我很恼火

当我浏览到
/Gallery/index
时,我的Gallery控制器、操作和视图都已定义并工作,以备有人询问时参考

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

你肯定是做错了什么,或者有些代码你还没有给我们看。执行以下步骤:

  • 使用默认向导创建新的ASP.NET MVC 3应用程序(Internet应用程序)
  • HomeController.cs
    的内容替换为以下内容:

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return Content("home/index");
        }
    }
    
    public class GalleryController : Controller
    {
        public ActionResult Index()
        {
            return Content("gallery/index");
        }
    }
    
  • 按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
    

    正如预期的那样,不是吗?

    您肯定应该做错事,或者您没有向我们展示一些代码。执行以下步骤:

  • 使用默认向导创建新的ASP.NET MVC 3应用程序(Internet应用程序)
  • HomeController.cs
    的内容替换为以下内容:

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return Content("home/index");
        }
    }
    
    public class GalleryController : Controller
    {
        public ActionResult Index()
        {
            return Content("gallery/index");
        }
    }
    
  • 按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
    

    正如所料,不是吗?

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

    幸运的是,今天早上我太累了,打不动显示器

    谢谢大家的建议,谢谢大家的指导


    注:帮助我调查我使用的问题。

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

    幸运的是,今天早上我太累了,打不动显示器

    谢谢大家的建议,谢谢大家的指导


    另外,为了帮助我调查我使用的问题。

    为了澄清,您只定义了这1条路线,默认路线?在此之前没有声明其他路线,并且您没有使用区域?您在所有方面都是正确的。您可能添加了另一个路由吗?没有,我特意发布了整个
    RegisterRoutes
    方法,以明确只有默认路由存在。这是哪个IIS在运行?内置VS2010虚拟服务器。为了澄清,您只定义了这1个路由,默认路由?在此之前没有声明其他路线,并且您没有使用区域?您在所有方面都是正确的。你可能添加了另一个路由了吗?没有,我特意发布了整个
    RegisterRoutes
    方法,以明确只有默认路由存在。这是哪个IIS在运行?内置的VS2010虚拟服务器。事实上,正如你所演示的那样,我现在要做一个区分,看看有什么不同于我的其他应用程序(这是一个空项目类型)这是一个愚蠢的开发者时刻。为了对我问的问题有一个明确的答案,我现在回答我自己的问题。感谢你的澄清,Darin,希望我能在这种情况下给予更多的支持。事实上,你已经证明了这一点,现在我要做一个区分看看我的另一个应用程序有什么不同(它是一个空项目类型)。好吧,这正式成为那些愚蠢的开发人员时刻之一。为了对我问的特定问题有一个具体的答案,我在回答我自己的问题。感谢你的澄清,不过Darin,希望我能在这种情况下给予更多的支持。嘿,+1因为没有攻击你可怜的毫无防御能力的监视器
    :)
    Heh,+1感谢你没有攻击你可怜的毫无防御能力的监视器
    :)