如何在 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>之前?

如何在 Swift 中向响应式网站添加后退按钮

如何在 ASP.NET Core 2.1 中向 Visual Studio 添加新的 Razor 页面模板?

如何在 Jquery Ajax 中向请求添加标头?

如何在 MVC3 中使用 https 生成绝对 URL?