Как в ASP.NET MVC изменить стратегию замены символов Url.Encode? - PullRequest
3 голосов
/ 22 августа 2009

Я использую Url.Encode в представлении, и он заменяет пробелы на +, поэтому вместо:

/ производство / кошки-мюзикл Я получаю ... / кошки + мюзикл .

Я уверен, что это легко, но куда вы переходите к настройке, какие символы используются для этого?

Я буду делать это:

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

Пока я не получу лучший ответ от вас, ребята.

Редактировать: Спасибо, Гаффа, за указание на мою поспешную кодировку.

Ответы [ 2 ]

4 голосов
/ 19 июня 2012

Хочу обратить внимание на различия в кодировке Path и Query String

MVC позволяет / поощряет нас писать пути (маршруты), которые легче запомнить, чем строки запроса. например /Products.aspx?id=1 может в MVC быть /Products/View/1

Опираясь на это, он также поощряет, для SEO, другие данные, которые могут или не могут быть необходимы, как /Products/View/1/Coffee

Если имя содержит пробельные символы или обязательным параметром является строка, содержащая пробельные символы, и вы включаете его в Url path , должна произойти одна из двух вещей, потому что нельзя оставить '' ' в параметре Url Path или Query string без кодирования.

  1. Вы должны UrlPathEncode() строка
  2. сначала вы преобразуете пробелы в строке,
    • , затем позвоните UrlPathEncode(), поскольку у вас могут быть другие символы, требующие кодирования.

Примечание : существует большая разница между кодировкой URL (предназначенной для строк запроса) и кодировкой пути URL (предназначенной для частей пути в URL)

  • cats the musical -> UrlEncode -> cats+the+musical - это , а не , действительный в URL путь
  • cats the musical -> UrlPathEncode -> cats%20the%20musical

Если вы следуете за собой; возврат к веб-формам против MVC - /Products.aspx?name=Coffee+Beans будет переписан как /Products/View/Coffee%20Beans

Так что это оставляет нас там, где начинается вопрос ОП. Q: Как вы получаете SEO и человеческие дружественные URL? Q: Используйте код @Guffas, чтобы заменить "" на "-" в вашем собственном коде перед UrlPathEncoding остальным.

На сайтах, над которыми я работал, когда у нас есть введенное пользователем значение, используемое только для SEO (например, название блога или подобное), мы делаем шаг вперед, нормализуя вывод строки, объединяя последовательные пробелы в один «-» например,

cats         the     musical
, который в противном случае был бы cats-----the-----musical становится cats-the-musical
3 голосов
/ 22 августа 2009

Вы не можете изменить, какие символы использует метод UrlEncode, использование «+» для пробелов определено в стандартах для того, как кодируется URL, вместо этого использование «-» будет означать, что метод изменит значение не просто кодировать это. Поскольку символ "-" не закодирован, не будет никакого способа декодировать строку обратно к исходному значению.

В вашем методе нет необходимости проверять персонажа перед выполнением замены. Если метод Replace не находит ничего для замены, он просто возвращает исходную ссылку на строку.

public static string EncodeForSEO(this UrlHelper helper, string unencodedUrl) {
   return helper.Encode(unencodedUrl.Replace(' ', '-'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...