我正在使用RestSharp创建向webservice发送http请求。其中一个参数的长度非常长,超过了100K个字符,因此我认为需要使用POST方法(由于GET方法对查询字符串长度有限制)。但是,当我尝试使用POST方法时,出现了异常,提示URI太长。我下载了他们的源代码,以找出原因。请看以下代码:
问题在于Uri.EscapeDataString无法处理超过65519个字符的字符串(请参见帖子-Uri.EscapeDataString() - Invalid URI: The Uri string is too long)
如果UrlEncode扩展方法像这样实现,则可以解决我的问题。
问题在于我不想修改源代码。是否有一种方法可以在我的源代码中编写自己的扩展方法,以便当第三方代码尝试调用UrlEncode()时,它会忽略自己的扩展方法而是调用我的扩展方法?任何帮助都将不胜感激。谢谢。
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() - Invalid URI: The Uri string is too long)
如果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()时,它会忽略自己的扩展方法而是调用我的扩展方法?任何帮助都将不胜感激。谢谢。