Хочу обратить внимание на различия в кодировке Path и Query String
MVC позволяет / поощряет нас писать пути (маршруты), которые легче запомнить, чем строки запроса. например /Products.aspx?id=1
может в MVC быть /Products/View/1
Опираясь на это, он также поощряет, для SEO, другие данные, которые могут или не могут быть необходимы, как /Products/View/1/Coffee
Если имя содержит пробельные символы или обязательным параметром является строка, содержащая пробельные символы, и вы включаете его в Url path , должна произойти одна из двух вещей, потому что нельзя оставить '' ' в параметре Url Path или Query string без кодирования.
- Вы должны
UrlPathEncode()
строка
- сначала вы преобразуете пробелы в строке,
- , затем позвоните
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