Asp.net MVC URL和目录结构

时间:2012-07-12 13:32:42

标签: asp.net-mvc

我已经阅读了很多关于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对象有足够的了解,以帮助我理解这一点?

谢谢, 雅克

1 个答案:

答案 0 :(得分:1)

这可以在global.asax.cs

中完全自定义

默认情况下,新的MVC项目会添加符合约定的标准“catchall”路由:www.mysite.com/Controller/Action/ID

如果你想要一些不同的东西,比如www.mysite.com/about路由到HomeController.About()动作的例子,你可以在之前添加以下路线 p>

routes.MapRoute(
    "My About Route",
    "About",
    new { controller = "Home", action = "About" }
);

您可以添加任意数量不遵循MVC捕获约定的自定义路由,如果您愿意,甚至可以完全替换捕获路由。


编辑:

要回答下面的评论,不一定不需要为每个可能的操作添加路线,而是可以制作符合网址模式的单一路线 - 就像正在进行的捕捉一样。 {controller}{action}是特殊关键字。

示例:

1。)程序有一个SetController,但用户习惯称它们为Batches:

routes.MapRoute(
    "Batch",
    "Batch/{action}/{id}",
    new { controller = "Set", action = "Index", id = UrlParameter.Optional }
);

2。)您更喜欢按照Controller的对象类型进行分组,但是url是动词/名词格式:

  • FlightController
  • HotelController
  • / find / flight / book / flight
  • / find / hotel / reserve / hotel / Hilton

routes.MapRoute(
    "NewCatchall",
    "{action}/{controller}/{name}",
    new { controller = "Home", action = "Index", name = UrlParameter.Optional }
);

第二个示例可以完全替换默认路由,并且所有可能的url都适合其格式。所以没有什么可以继续检查任何其他路线。重要的是要知道路由按顺序检查,并且使用与请求匹配的第一个模式 - 其余模式被忽略。

这些在学习时对我有用: