我想开发如下所示的网址:
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
答案 0 :(得分:3)
在更深入的Google搜索中,我找到了以下用于生成slug的链接:
http://www.intrepidstudios.com/blog/2009/2/10/function-to-generate-a-url-friendly-string.aspx
感谢@Rob和@Coding the Wheel给我的术语,我真的需要找到这个答案!
答案 1 :(得分:2)
一个简单的选择是使用一个访问器向模型对象添加一个属性,该访问器将相应的字段(在本例中为简短描述)规范化为合适的“slug”;也就是说,标识符后面的垃圾文本位。然后在构造URI时使用它。
规范化过程可能就像删除任何非字母数字字符并用连字符替换空格一样简单。
答案 2 :(得分:1)
这里的标准做法是在每个帖子中存储一个'slug',它将作为帖子的外向URL。例如,上面帖子的slug将是:
best-product-in-the-world
一个体面的CMS会自动为您执行此操作,并允许您在保存之前调整slu。