2010-09-04 47 views
3

我开始将现有的ASP.NET Web Forms CMS移植到ASP.NET MVC,并希望从一开始就获得路由权。asp.net mvc routing with optional starting参数

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

我认为this answer已经接近我正在寻找的东西,但想要一些额外的输入应该有人拥有它。

当前的URL结构调查是这样的:??

内容=新闻/ CurrentNews/This_is_a_news_article
内容=公司/ About_Us /概述

等等等等

我想添加一个可选的语言参数并在MVC中保留一个类似的结构。因此,像:

新闻/ CurrentNews /这 - 是 - 一 - 新闻文章
EN /新闻/ CurrentNews /这 - 是 - 一 - 新闻文章

编辑/新闻/ CurrentNews /这 - 是 - 一 - 新闻文章
编辑/ EN /新闻/ CurrentNews /这 - 是 - 一 - 新闻文章

还是我更好地与反向?

新闻/ CurrentNews /这 - 是 - 一 - 新闻 - 文/编辑
EN /新闻/ CurrentNews /这 - 是 - 一 - 新闻 - 文/编辑

我觉得这种方式(在最后采取行动)为我读过的其他问题的每一个场景寻找路线。

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

我只能在URL中显示当前页面,并从数据库分离地构建面包屑。

像:

EN /这 - 是 - 一 - 新闻文章

与面包屑

首页>新闻中心>最新新闻>这是一个新闻文章

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

回答

1

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

我个人构建这样的:

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

为什么[的itemId]你可能会问?如果你有一个更大的网站,可能会发生这样的情况,即你有两篇新闻文章的名字完全相同。你的代码可能“恰好”写成只显示返回的第一个newsitem,但它可能不是。一个ID总是唯一的,在SEO方面,添加ID实际上并不重要(至少在我的经验中)。

您可以添加一个路线,其中省略了[语言],而是提供默认值。

此外,Scott Guthrie在前一段写了一个不错的blogpost,这绝对值得一读,我认为它仍然适用于MVC 3.它可能只是给你一些想法!

+0

感谢您的见解。最后的itemid肯定是有效的和重要的。 – 2010-09-07 01:35:29