Еще раз покопался в друзьях и нашел дубликат вопроса для Java: Кодировка HTTP-адреса в Java
Однако класс .Net Uri не предлагаетнам нужен конструктор, но UriBuilder делает.
Итак, чтобы построить правильный URI, в котором путь содержит недопустимые символы, сделайте следующее:
// Build Uri by explicitly specifying the constituent parts. This way, the hash is not confused with fragment identifier
UriBuilder uriBuilder = new UriBuilder("http", "www.contoso.com", 80, "/code/c#/somecode.cs");
Debug.WriteLine(uriBuilder.Uri);
// This outputs: http://www.contoso.com/code/c%23/somecode.cs
Обратите внимание, что не без необходимости экранирует части URI, которые не нуждаются в экранировании (например, часть: //), как в случае с HttpUtility.UrlEncode.Казалось бы, цель этого класса - на самом деле кодировать часть URL-адреса строки запроса / фрагмента, а не схему или имя хоста.