3

我正在将现有的 ASP.NET Web 窗体 CMS 移植到 ASP.NET MVC,并希望从一开始就获得路由。

注意:拥有完全相同的 URL 结构并不重要。

我认为这个答案与我正在寻找的答案很接近,但如果有人有的话,我希望得到一些额外的输入。

当前的 URL 结构如下:

?Content=News/CurrentNews/This_is_a_news_article
?Content=Corporate/About_Us/Overview

等等等等

我想添加一个可选的语言参数并在 MVC 中保持类似的结构。所以像:

新闻/CurrentNews/This-is-a-news-article
en/News/CurrentNews/This-is-a-news-article

编辑/新闻/CurrentNews/This-is-a-news-article
编辑/en/News/CurrentNews/This-is-a-news-article

还是反过来我会更好?

新闻/CurrentNews/This-is-a-news-article/edit
en/News/CurrentNews/This-is-a-news-article/edit

我认为这种方式(最终采取行动)要求从我读过的其他问题中为每个场景提供一条路线。

另一点是现有的 URLS 是像 SEO 和面包屑生成那样完成的。即 URL 显示当前导航路径。

我可以在 URL 中显示当前页面,并从数据库中单独构建面包屑。

喜欢:

zh/This-is-a-news-article

有面包屑的

首页 > 新闻资讯 > 时事新闻 > 这是一篇新闻文章

总体思路和解决方案?我应该从自定义路由类开始以获得最大的灵活性吗?

4

1 回答 1

1

您必须确保某些路由规则不会意外重叠。例如,假设您将语言作为第一个标签,请确保不存在名称为“en”的新闻类别。我知道这是一个愚蠢的例子,但我想你明白了。确保将最不准确的路由规则放在最后。

我个人会这样构造它:

[language]/[category]/[subcategory]/[itemtitle]/[itemid]

为什么您可能会问 [itemId]?如果您有一个更大的网站,则可能会出现 2 篇同名的新闻文章。您的代码可能“恰好”被编写为仅显示返回的第一个 newsitem,但也可能不是。ID 始终是唯一的,在 SEO 术语中,添加 ID 真的无关紧要(至少根据我的经验)。

您可以添加省略 [language] 并提供默认值的路由。

另外,Scott Guthrie 不久前写了一篇不错的文,绝对值得一读,我认为它对 MVC 3 仍然有效。它可能只是给你一些想法!

于 2010-09-06T15:00:55.910 回答