+
имеет специальное значение, являясь пробелом в application/x-www-form-urlencoded
данных, таких как часть строки запроса URL.
В других частях URL, таких как компоненты пути, +
буквальноозначает знак плюс.Поэтому преобразование Full+Size
в незашифрованное имя Full Size
нигде не должно работать.
Единственная правильная форма пробела в компоненте пути - %20
.(Он по-прежнему работает, когда вы вводите фактический пробел, потому что браузер обнаруживает ошибку и исправляет ее для вас.) %20
также работает и с данными, закодированными в URL-адресе формы, поэтому обычно всегда безопаснее использовать это.
К сожалению, HttpUtility.UrlEncode
обманчиво назван.Он выводит +
в своем выводе вместо %20
, так что это действительно кодировщик URL-адреса формы, а не стандартный URL-кодировщик.К сожалению, я не знаю функции ASP.NET для «действительно URL-кодирования» строк для использования в пути, поэтому все, что я могу порекомендовать, - это заменить строку с +
на %20
после кодирования.
В качестве альтернативы, избегайте использования пробелов в частях пути, например.заменив их на -
.Обычно заголовки 'slug' вставляются в URL-адреса, сокращая их до простых буквенно-цифровых символов и 'безопасной' пунктуации, чтобы избежать заполнения URL уродливыми %nn
последовательностями.