ASP.Net MVC - 路由对象id == title - 如何处理重复?

时间:2009-05-29 09:53:25

标签: c# sql-server asp.net-mvc

网页已经开始使用以下网址:

// weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx

即。它们包含网址中页面的标题,而不是具有一些编码ID。

据我所知,这对搜索引擎优化很有用,也可供用户找到他们希望在网址中输入的正确页面。

我想遵循这种方法,但想知道如何最好地实现它,特别是如何处理重复。

是一个数据库触发器,它根据标题创建url,并为任何重复项添加一个数字增量后缀,这是最好的方法,如果有的话,这样的触发器会是什么样的?

4 个答案:

答案 0 :(得分:1)

而不是基于标题的id,他们可以使用基于日期和标题的id( 2007/12/20 / asp-net-mvc-framework-part-2-url-routing < / em>的)。因此,如果您在一天内没有相同标题的文章(这不是太严格的限制),则会删除重复项。

答案 1 :(得分:0)

您必须在应用程序中对此概念进行建模。基于标题的网址生成可以是自动,但不能不可见。 WordPress(也可能是其他CMS)也做得很好 - 他们会根据您输入的信息默认URL,但URL的“关键”部分对用户可见且可编辑,且唯一性在适当的级别(全球,每月,每天 - 无论如何)执行。

让URL生成完全不可见会导致用户混淆错误,我相信。

答案 2 :(得分:0)

至少在Wordpress中,“slug”(他们称之为“slug”)从项目标题生成一次并单独存储在数据库中。如果两个“slu”“碰撞,它会将-1-2等附加到最后。我个人更喜欢在提交表单中添加(可选)字段以允许人们插入自己的字段 - 它允许人们指定比my-long-article-is-hard-to-type更短的URL。

答案 3 :(得分:0)

你可以做同样的事情。也就是说,slug只存在于GoogleJuice中。这两个网址解决了同样的问题:

ASP.Net MVC - route object id == title - how to deal with duplicates?

ASP.Net MVC - route object id == title - how to deal with duplicates?

因此,在您给出的示例中,如果CMS为每个帖子分配了一个唯一的数字标识符(我认为很可能),那么您可以将其包含在URL中:

http://weblogs.asp.net/scottgu/archive/2007/12/03/1234/asp-net-mvc-framework-part-2-url-routing

在此示例中,符号1234是帖子的标识符。