带有可选启动参数的ASP.NET MVC路由
-
30-09-2019 - |
题
我正在启动现有的ASP.NET Web的端口,将CMS cms启动到ASP.NET MVC,并希望从一开始就获得路由。
注意:拥有完全相同的URL结构并不重要。
我认为 这个答案 接近我想要的东西,但如果有人拥有,希望有一些其他输入。
当前的URL冲突就像:
?
?content = corporate/about_us/概述
等等
我想添加可选的语言paramater,并在MVC中保留类似的结构。所以类似:
News/CurrentNews/this-is-a-News-Article
en/news/currentnews/this-is-a news-article编辑/新闻/CurrentNews/this-is-a-a-News-Article
编辑/en/news/currentnews/this-is-a news-article
还是我的反向更好?
News/CurrentNews/this-is-a-a-news-article/编辑
en/news/currentnews/this-is-a news-article/edit
我认为这种方式(最终采取了行动)将我读过的其他问题的每种情况都重新考虑。
另一点是现有的URL是为SEO和面包屑一代所做的。即URL显示当前的导航路径。
我可以在URL中显示当前页面,然后分离数据库构建面包屑。
像:
en/this-iS-a新网络
与面包屑
首页>新闻>当前新闻>这是一篇新闻文章
整体思想和解决方案?我应该从自定义路由类开始以最大程度的灵活性吗?
解决方案
您必须确保不会意外重叠某些路由规则。例如,说您将语言视为第一个标签,请确保没有任何新闻类别具有“ en”的名称。我知道这是一个愚蠢的例子,但我认为您明白了。确保最后放置最不准确的路由规则。
我个人会这样构建它:
[language]/[category]/[subcategory]/[itemtitle]/[itemid]
为什么您可能会问[itemID]?如果您有一个较大的网站,则可能会有2篇新闻文章具有完全相同的名字。您的代码可能“恰好是”而仅显示出第一个新闻元素,但也可能没有。 ID始终是独一无二的,用SEO术语添加ID,确实无关紧要(至少根据我的经验)。
您可以添加一条路由[语言]被排除在外,而是提供默认值。
另外,斯科特·古斯里(Scott Guthrie)写了一本好 Blogpost 在此之前,这绝对值得一读,我认为这对于MVC 3仍然有效。它可能只会给您一些想法!