Система. Uri не может проанализировать, когда поле пароля или имени пользователя содержит специальный символ

Следующий код бросает Систему. UriFormatException:

var uri = new UriBuilder("ftp://user:pass#word@ftp.somewhere.com:21/fu/bar.zip");

Система. UriFormatException: Недопустимый URI: порт ожидался из-за существует двоеточие (': '), подарок, но порт не мог быть проанализирован.

Удаление # символа от поля пароля решает проблему.

  1. Действительно ли # символ является допустимым символом, чтобы иметь в поле пароля?
  2. Существует ли способ выйти из этого?
  3. Действительно ли это - известная ошибка в стандартной программе парсинга класса Uri?
  4. Как каждый обходит это - предположение, что Вы не можете изменить пароль?;-)

Спасибо, Andrew

8
задан Andrew 11 January 2015 в 10:50
поделиться

2 ответа

Вместо этого вы сможете использовать% 23.

Символ процента, за которым следует двузначное шестнадцатеричное число, указывает на то, как символы экранируются в URL-адресах. 23 - шестнадцатеричное значение для символа решетки / фунта в таблице ASCII.

Вместо того, чтобы решать эту конкретную проблему, вы должны решить эту проблему в целом, закодировав все поля имени пользователя и пароля. Вы можете сделать это с помощью System.Web.HttpUtility.UrlEncode (см. Сборку System.Web ):

string username = ...
string password = ...
string url = string.Format("ftp://{0}:{1}@ftp.example.com:21/fu/bar.zip",  HttpUtility.UrlEncode(username),
                                                                           HttpUtility.UrlEncode(password));
12
ответ дан 5 December 2019 в 12:57
поделиться

# нужно закодировать, так как он считается специальным символом. Даже тогда, не уверен, что это сработает. Никогда не пробовал.

1
ответ дан 5 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: