0

我想开发如下所示的 URL:

http://mysite.com/products/1/best-product-in-the-world

我需要得到正确记录的地方是以下路线:

http://mysite.com/products/1

当我将产品描述部分添加到 URL(“世界上最好的产品”)时,我遇到了 URL 编码问题。在 ActionLink(...) 中构造我的这部分 URL 时,我尝试使用 Server.UrlEncode:

<%= Html.ActionLink(item.Subject, "../Post/Detail", 
    new { id = item.ID, 
          descriptiveUrl = Server.UrlEncode(Product.ShortDescription) }, 
    new { rel = "canonical", 
          title = Product.ShortDescription, 
          @class = "product-hyperlink" })%>

但这会为特殊字符和空格呈现规则编码的元素,就像下面这样:

http://localhost:2392/Products/Detail/1/best+product+in+the+world253f

...这会创建一个 400 错误的请求异常。不确定我的问题是否公正,但如果需要,可以提供进一步的说明。

更新:这篇文章的网址如下,我正在尝试做一些非常相似的事情!

http://stackoverflow.com/questions/1148955/creating-search-engine-friendly-urls-in-asp-net-mvc
4

3 回答 3

3

在更深入的 Google 搜索中,我找到了以下用于生成 slug 的链接:

http://www.intrepidstudios.com/blog/2009/2/10/function-to-generate-a-url-friendly-string.aspx

感谢@Rob 和@Coding the Wheel 给了我找到这个答案真正需要的术语!

于 2009-07-19T00:48:32.910 回答
2

一个简单的选择是使用访问器向模型对象添加一个属性,该访问器将适当的字段(在本例中为简短描述)标准化为合适的“slug”;也就是说,标识符后面的垃圾文本位。然后在构造 URI 时使用它。

规范化过程可能就像删除任何非字母数字字符并用连字符替换空格一样简单。

于 2009-07-19T00:39:25.763 回答
1

这里的标准做法是在每个帖子中存储一个“slug”,作为帖子的外向 URL。例如,您对上述帖子的 slug 将是:

best-product-in-the-world

一个体面的 CMS 会自动为您执行此操作,并允许您在保存之前调整 slug。

于 2009-07-19T00:41:07.947 回答