带有可选启动参数的asp.net mvc路由

时间:2010-09-04 16:14:47

标签: asp.net asp.net-mvc asp.net-mvc-routing url-design

我正在启动现有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

  

主页>新闻>当前新闻>这是一篇新闻文章

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

1 个答案:

答案 0 :(得分:1)

您必须确保某些路由规则不会意外重叠。例如,假设您将语言作为第一个标记,请确保没有名称为“en”的新闻类别。我知道这是一个愚蠢的例子,但我认为你得到的照片。确保最后准确的路由规则。

就我个人而言,我会像这样构建它:

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

为什么你会问[itemId]?如果您有一个更大的网站,可能会发生2篇具有完全相同名称的新闻文章。您的代码可能“恰巧被”写入仅显示返回的第一个newsitem,但它也可能不是。 ID总是唯一的,在SEO方面,添加ID,确实无关紧要(至少根据我的经验)。

您可以添加省略[语言]的路线,而是提供默认值。

此外,Scott Guthrie刚才写了一篇很好的blogpost,这绝对值得一读,我认为它对MVC 3仍然有效。它可能只是给你一些想法!