Я использую RestSharp для создания http-запросов к веб-сервису. Длина одного из параметров очень длинная > 100 тыс. символов, поэтому я решил, что мне нужно будет использовать метод POST (из-за ограничений на длину строки запроса с помощью GET). Однако, когда я попытался это сделать, я получил исключение, что uri слишком длинный. Я скачал их исходный код, чтобы узнать почему. Взгляните на следующий код:
querystring.AppendFormat("{0}={1}", p.Name.UrlEncode(), p.Value.UrlEncode());
Теперь метод UrlEncode() является методом расширения, доступным в классе StringExtensions.cs, и его реализации выглядят так:
public static string UrlEncode(this string input)
{
return Uri.EscapeDataString(input);
}
Проблема в том, что Uri.EscapeDataString не может обработать строку длиной более 65519 символов (см. сообщение - Uri.EscapeDataString() - Недопустимый URI: строка Uri слишком длинная)
Моя проблема может быть решена, если метод расширения UrlEncode был реализован следующим образом
public static string UrlEncode(this string input)
{
int limit = 65520;
StringBuilder sb = new StringBuilder();
int loops = input.Length / limit;
for (int i = 0; i <= loops; i++)
{
if (i < loops)
{
sb.Append(Uri.EscapeDataString(input.Substring(limit * i, limit)));
}
else
{
sb.Append(Uri.EscapeDataString(input.Substring(limit * i)));
}
}
return sb.ToString();
}
Проблема в том, что я НЕ хочу изменять исходный код. Есть ли способ, которым я могу написать свой собственный метод расширения в МОЕМ исходном коде, чтобы, когда сторонний код пытается вызвать UrlEncode(), он игнорировал свой собственный метод расширения и вместо этого вызывал мой метод расширения??
Любая помощь горячо приветствуется. Спасибо.