1

我已经阅读了许多关于 Asp.net MVC 和目录结构的问题,但我仍然不明白如何模仿常规 URL 目录,例如 www.mysite.com/books/adventure/uk

而且,当您想到诸如主页、关于、联系我们等标准站点页面时。您不想为每个页面创建一个控制器,但您也不希望 URL 看起来像这样:www.mysite。 com/home/about 您最好希望它是 www.mysite.com/about

任何人都对 maproute 对象有足够的了解来帮助我理解这一点?

谢谢, 雅克

4

1 回答 1

1

这是完全可定制的global.asax.cs

默认情况下,一个新的 MVC 项目会添加遵循约定的标准 'catchall' 路由:www.mysite.com/Controller/Action/ID

如果您想要一些不同的东西,例如您的 www.mysite.com/about 路由到 HomeController.About() 操作的示例,您可以在包罗万象的之前添加以下路由:

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

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


编辑:

要在下面回答您的评论,不,您不一定需要为每个可能的操作添加路线,而是可以制作一条适合 url 模式的路线 - 就像包罗万象的路线一样。{controller}{action}是特殊的关键字。

例子:

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

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

2.) 您更喜欢按控制器的对象类型进行分组,但 URL 必须是动词/名词格式:

  • 飞行控制器
  • 酒店控制器
  • /查找/飞行 /预订/飞行
  • /查找/酒店/预订/酒店/希尔顿

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

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

这些对我学习时很有用:

于 2012-07-12T14:21:31.977 回答