如何在ASP.NET MVC中更改Url.Encode字符替换策略?

时间:2009-08-22 17:30:36

标签: asp.net-mvc url encoding configuration

我在视图中使用Url.Encode,它用+代替空格而不是:

/ production / cats-the-musical 我正在 ... / cats + the + musical

我确定这是一个简单的,但你在哪里配置使用哪个字符?

我会这样做:

public static string EncodeForSEO(this UrlHelper helper, string unencodedUrl)
{
     return helper.Encode(unencodedUrl.Replace(' ', '-'));
}

直到我从你们那里得到更好的答案。

编辑:感谢Guffa指出我的草率编码。

2 个答案:

答案 0 :(得分:4)

我想提请注意路径与查询字符串编码差异

MVC允许/鼓励我们编写比查询字符串更容易记住的路径(路由)。例如在MVC中,/Products.aspx?id=1可能是/Products/View/1

在此基础上,它还鼓励SEO友好,其他可能需要或不需要的数据,如/Products/View/1/Coffee

如果名称包含空格字符,或者必要参数是包含空格字符的字符串,并且您将其包含在Url 路径中,则必须执行以下两项操作之一,因为''不能留在Url Path或Query字符串参数中而不进行编码。

  1. 您必须UrlPathEncode()字符串
  2. 首先转换字符串中的空格,
    • 然后拨打UrlPathEncode(),因为您可能还有其他需要编码的字符。
  3. 注意:Url编码(用于查询字符串)和Url路径编码(用于Url的路径部分)之间存在很大差异

    • cats the musical - > UrlEncode - > cats+the+musical - 在 路径
    • 无效
    • cats the musical - > UrlPathEncode - > cats%20the%20musical

    如果你跟随;回到Web Forms与MVC - /Products.aspx?name=Coffee+Beans将被重写为/Products/View/Coffee%20Beans

    这样就让我们开始讨论OP的问题。问:你如何获得 SEO和人性化的网址?问:在UrlPathEn编码其余代码之前,使用@Guffas代码在您自己的代码中将“”替换为“ - ”。

    在我工作过的网站中,当我们有一个用户输入的值仅用于搜索引擎优化(如博客标题或类似)时,我们通过将连续的空格折叠成单个“ - ”来进一步规范化字符串输出。例如

    cats         the     musical
    否则会cats-----the-----musical成为cats-the-musical

答案 1 :(得分:3)

你不能改变UrlEncode方法使用的字符,对于空格的使用“+”在URL的编码标准中定义,使用“ - ”代替意味着该方法会改变值和不只是编码它。由于“ - ”字符未编码,因此无法将字符串解码回原始值。

在您的方法中,在进行替换之前无需检查角色。如果Replace方法没有找到要替换的内容,则只返回原始字符串引用。

public static string EncodeForSEO(this UrlHelper helper, string unencodedUrl) {
   return helper.Encode(unencodedUrl.Replace(' ', '-'));
}