2009-07-19 90 views
0

我想开发的URL看起来像如下:创建搜索引擎友好的URL在ASP.NET MVC

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

,所有我需要得到适当的记录是以下路线:

http://mysite.com/products/1 

当我将产品说明片段添加到URL(“最佳产品”)时,我得到了URL编码问题。我试着在ActionLink的(...)构建自己的网址的这一部分时使用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 

回答

2

一个简单的办法是将属性添加到模型对象与正常化的适当字段(在此情况下简短描述)降低到一个合适的“塞”的存取器;也就是标识符后的垃圾文本位。然后在构造URI时使用它。

标准化过程可能非常简单,只需删除任何非字母数字字符并用连字符替换空格即可。

+0

我想你是对的。这里是另一个问题提出相同的问题(http://stackoverflow.com/questions/217960/how-can-i-create-a-friendly-url-in-asp-net-mvc)。我想我想确保我生成一个URL安全的“slug”。 – jn29098 2009-07-19 00:41:54

1

这里的标准做法是存储一个'slug',每个帖子将作为帖子的外向URL。例如,你对上述职位蛞蝓是:

best-product-in-the-world 

一个体面的CMS将自动为您做到这一点,并允许您在保存之前调整蛞蝓。

+0

所以我没有使用CMS。您是否熟悉处理所有可能的字符变化和问题以生成初始段塞值的任何库或片段? – jn29098 2009-07-19 00:44:47