В соответствии с RFC 3986 допустимые символами для компонента пути являются:Url Path Кодирование, которое действительно работает?
a-z A-Z 0-9 . - _ ~ ! $ & ' () * + , ; = : @
, а также процентов закодированных символов и, конечно же, слэш /
.
Однако я не могу найти класс, который преобразует строку в хорошо отформатированный путь в соответствии с приведенными выше правилами.
string rawPath = "/A9_([email protected]*)/# ?/";
string expectedPath = "/A9_([email protected]*)/%23%20%3f";
Однако увидеть код ниже:
string rawPath = "/A9_([email protected]*)/# ?/";
Uri.EscapeDataString(rawPath); //Output=>%2FA9_%28%2B%40%2A%29%2F%23%20%3F%2F
Uri.EscapeUriString(rawPath); //Ouput=>/A9_([email protected]*)/#%20?/
HttpUtility.UrlPathEncode(rawPath); //Ouput=>/A9_([email protected]*)/#%20?/
Я ничего не пытался листы разрешенных символов незаменяемыми и Собственость ускользает все другие символы.
Надеюсь, кто-то может спасти меня от необходимости писать мою собственную утилиту!
Вы просто пытаетесь форматировать определенный способ или URL-адрес не работает? –
Наверное, никто, кто проходит в '#' или '?' Как часть пути, не убежит от него; они хотят, чтобы вы относились к ним как к разделителям. Неудивительно, что для этого не существует заранее подготовленного метода - разумная вещь - не допускать путей, которые включают символы '#' или '?' В качестве символов, независимо от того, могут ли они быть переданы. (Я бы не ожидал, что многие веб-серверы тоже будут правильно рассматривать этот случай, но это еще одна проблема.) –