Следующий код бросает Систему. UriFormatException:
var uri = new UriBuilder("ftp://user:pass#word@ftp.somewhere.com:21/fu/bar.zip");
Система. UriFormatException: Недопустимый URI: порт ожидался из-за существует двоеточие (': '), подарок, но порт не мог быть проанализирован.
Удаление # символа от поля пароля решает проблему.
Спасибо, Andrew
Вместо этого вы сможете использовать% 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));
# нужно закодировать, так как он считается специальным символом. Даже тогда, не уверен, что это сработает. Никогда не пробовал.