如何在 MVC3 中向页面 url 添加“文本 slug”?
Posted
技术标签:
【中文标题】如何在 MVC3 中向页面 url 添加“文本 slug”?【英文标题】:How to add a 'text slug' to a page url in MVC3? 【发布时间】:2012-02-14 13:44:54 【问题描述】:查看 *** 的作用:
http://***.com/questions/8933768/c-sharp-boolean-outside-method-wont-read
该 URL 无需最终装饰器即可工作,主要用于 SEO 目的。
我想在我的 ASP.Net MVC3 应用程序上使用类似的东西。
假设在Article
表上我有一个字段Slug nvarchar(1024) not null
,我如何将它推出路由引擎,以便在有人访问链接时出现?
我希望该 ID 可见,并且即使最后没有 slug 链接也能正常工作。万一我更改了数据库中的 slug,任何链接仍然有效,因为 ID 将是文章的唯一链接。
一个清晰、简短的例子将是惊人的。
【问题讨论】:
看来nvarchar(2083)
是来自here 的URL 的最佳列类型
【参考方案1】:
最好的方法是让 url 的第二部分,即 slug,成为与如何完成查找无关的字段。您的路线定义将是这样的:
routes.MapRoute(
"article"
"articles/id/slug",
new controller = "Article", action = "Index", slug = ""
);
以及匹配的动作:
public ActionResult Index(int id, string slug)
var article = _repository.GetById<Article>(id);
......
return View();
如果您担心人们使用有效 ID 请求无效的 slug(以及这可能对 SEO 产生的影响),那么您的控制器操作可能有一个额外的操作,该操作会根据文章验证 slug 并执行 301 重定向每当提供了不正确的 slug 时,都可以转到所需的 URL。顺便说一句,这就是 *** 所做的。如果您修改问题 URL 的标题部分,您将看到该网站将您重定向。
【讨论】:
那是一些简洁明了的代码。感谢分享和额外的重定向建议。 :) 还有一个我讨厌答案的 5 分钟编辑宽限期的另一个原因,当您最初发布时,您的帖子在我发布答案之前没有提及对 SEO 或重定向的影响。 对@AnthonyShaw 感到抱歉,这是事后才想到的,我实际上是在 编辑了我的原始回复之后看到了您的相关答案内容。投赞成票。 :) 嗨,我为这篇文章提供了无效的 slug,例如http://***.com/questions/8933860/34how-trto-a34dd-a-tertrxt-slug-to-a343-page-ur33l-in-mvc3
,是的,*** 重定向到正确的帖子。【参考方案2】:
首先声明一个路由“slug”参数,然后在定义动作链接或动作url时通过路由值传递它。
【讨论】:
【参考方案3】:routes.MapRoute("Slugged", "controller/action/id/slug", new controller = "Home", action = "Index", id = UrlParameter.Optional );'
然后,对于处理您的呼叫的操作,接受 id 和 slug 参数。
然后我会验证提供的 slug 是否与数据库中实际记录中的 slug 匹配,如果不匹配,则 301 重定向到正确的 id 和 slug(我这么说的原因是你没有得到如果人们发现您的 slug 可以更改并以多种不同方式链接到您,则在 SEO 中标记)
【讨论】:
以上是关于如何在 MVC3 中向页面 url 添加“文本 slug”?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 prestashop 1.7 中向 cms 页面添加挂钩
在MVC3中如何将所有脚本移动到页面底部的</body>之前?