【问题标题】:How to add a 'text slug' to a page url in MVC3?如何在 MVC3 中向页面 url 添加“文本 slug”?
【发布时间】:2012-02-14 13:44:54
【问题描述】:

查看 StackOverflow 的作用:

http://stackoverflow.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 的最佳列类型

标签: c# asp.net-mvc-3 seo slug


【解决方案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。顺便说一句,这就是 StackOverflow 所做的。如果您修改问题 URL 的标题部分,您将看到该网站将您重定向。

【讨论】:

  • 那是一些简洁明了的代码。感谢分享和额外的重定向建议。 :)
  • 还有一个我讨厌答案的 5 分钟编辑宽限期的另一个原因,当您最初发布时,您的帖子在我发布答案之前没有提及对 SEO 或重定向的影响。
  • 对@AnthonyShaw 感到抱歉,这是事后才想到的,我实际上是在 编辑了我的原始回复之后看到了您的相关答案内容。投赞成票。 :)
  • 嗨,我为这篇文章提供了无效的 slug,例如 http://stackoverflow.com/questions/8933860/34how-trto-a34dd-a-tertrxt-slug-to-a343-page-ur33l-in-mvc3,是的,stackoverflow 重定向到正确的帖子。
【解决方案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 中标记)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-11
      • 2020-06-19
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 2013-08-23
      相关资源
      最近更新 更多