我已经阅读了很多关于Asp.net MVC和目录结构的问题,但我仍然不明白如何模仿常规的URL目录,例如www.mysite.com/books/adventure/uk
而且,当您考虑标准网站页面时,例如Home,About,Contact Us等。您不希望为每个页面创建一个Controller,但您也不希望Urls看起来像这样: www.mysite.com/home/about 您最好希望它是www.mysite.com/about
任何人都对maproute对象有足够的了解,以帮助我理解这一点?
谢谢, 雅克
答案 0 :(得分:1)
这可以在global.asax.cs
默认情况下,新的MVC项目会添加符合约定的标准“catchall”路由:www.mysite.com/Controller/Action/ID
如果你想要一些不同的东西,比如www.mysite.com/about路由到HomeController.About()动作的例子,你可以在之前添加以下路线: p>
您可以添加任意数量不遵循MVC捕获约定的自定义路由,如果您愿意,甚至可以完全替换捕获路由。 编辑: 要回答下面的评论,不一定不需要为每个可能的操作添加路线,而是可以制作符合网址模式的单一路线 - 就像正在进行的捕捉一样。 示例: 1。)程序有一个SetController,但用户习惯称它们为Batches: 2。)您更喜欢按照Controller的对象类型进行分组,但是url是动词/名词格式: 第二个示例可以完全替换默认路由,并且所有可能的url都适合其格式。所以没有什么可以继续检查任何其他路线。重要的是要知道路由按顺序检查,并且使用与请求匹配的第一个模式 - 其余模式被忽略。 这些在学习时对我有用:routes.MapRoute(
"My About Route",
"About",
new { controller = "Home", action = "About" }
);
{controller}
和{action}
是特殊关键字。routes.MapRoute(
"Batch",
"Batch/{action}/{id}",
new { controller = "Set", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
"NewCatchall",
"{action}/{controller}/{name}",
new { controller = "Home", action = "Index", name = UrlParameter.Optional }
);