我正在启动现有ASP.NET Web Forms CMS到ASP.NET MVC的端口,并希望从一开始就获得路由。
注意:拥有完全相同的URL结构并不重要。
我认为this answer接近我正在寻找的东西,但是如果有人拥有它,我想要一些额外的输入。
当前的网址结构如下:
?含量=新闻/ CurrentNews / This_is_a_news_article
?含量=企业/ About_Us /概述
等等
我想添加一个可选的语言参数,并在MVC中保留类似的结构。如下所示:
或者我反过来更好吗?新闻/ CurrentNews /这-是-A-新闻文章
EN /新闻/ CurrentNews /这 - 是 - 一 - 新闻文章编辑/新闻/ CurrentNews /这-is-a的新闻,文章
编辑/ EN /新闻/ CurrentNews /这 - 是 - 一 - 新闻文章
新闻/ CurrentNews /这 - 是 - 一 - 新闻 - 文/编辑
EN /新闻/ CurrentNews /这 - 是 - 一 - 新闻 - 文/编辑
我认为这种方式(结束时采取行动)需要从我读过的其他问题中找出每种情况的路线。
另一点是现有的URL就像SEO和面包屑生成一样。即URL显示当前导航路径。
我可以在URL中显示当前页面,并分别从数据库中构建面包屑。
像:
烯/这-是-A-新闻文章
with crumb
主页>新闻>当前新闻>这是一篇新闻文章
总体思路和解决方案?我应该从自定义路由类开始,以获得最大的灵活性吗?
答案 0 :(得分:1)
您必须确保某些路由规则不会意外重叠。例如,假设您将语言作为第一个标记,请确保没有名称为“en”的新闻类别。我知道这是一个愚蠢的例子,但我认为你得到的照片。确保最后准确的路由规则。
就我个人而言,我会像这样构建它:
[language]/[category]/[subcategory]/[itemtitle]/[itemid]
为什么你会问[itemId]?如果您有一个更大的网站,可能会发生2篇具有完全相同名称的新闻文章。您的代码可能“恰巧被”写入仅显示返回的第一个newsitem,但它也可能不是。 ID总是唯一的,在SEO方面,添加ID,确实无关紧要(至少根据我的经验)。
您可以添加省略[语言]的路线,而是提供默认值。
此外,Scott Guthrie刚才写了一篇很好的blogpost,这绝对值得一读,我认为它对MVC 3仍然有效。它可能只是给你一些想法!