我不知道为什么我一直在努力解决这个问题,但有人能解释为什么这不起作用吗?
/
重定向到index
控制器的home
操作。
/gallery/
会抛出404未找到的错误。
/gallery/index
重定向到index
控制器的gallery
操作。
定义路径时,可以为参数指定默认值。如果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
。gallery
,网址中未包含操作,因此应该转到Index
。我是否遗漏了某些不必要的混淆和愚蠢的东西?
我总是发现MVC3路由有问题,但接受了它。然后我开始使用Rails和Node框架,他们有简单的路由,所以现在.NET MVC只是在它不起作用时让我烦恼或者让我使用复杂的模式。
如有人要求参考,我浏览/gallery/index
时,我的图库控制器,操作和视图都已定义并正常工作。
public class GalleryController : Controller
{
public ActionResult Index()
{
return View();
}
}
答案 0 :(得分:5)
你肯定应该做错事,或者有些代码没有向我们展示过。执行以下步骤:
将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
正如预期的那样,不是吗?
答案 1 :(得分:1)
问题是我有一个隐藏目录(未包含在我的解决方案中),其名称与我的错误路由相同:/gallery
。
幸运的是,今天早上我太累了,不能打开显示器。
感谢大家的建议,所有人都给了+1,以获得有用的指导。
PS。为了帮助我调查问题,我使用了Phil Haack's routing debugger。