我正在使用RestSharp創建對web服務的http請求。其中一個參數長度超過100K字符,所以我想我需要使用POST方法(因爲GET的查詢字符串的長度限制)。但是,當我嘗試這樣做時,我得到了一個例外,那就是uri太長了。我下載了他們的源代碼來找出原因。看看下面的代碼:覆蓋擴展方法C#
querystring.AppendFormat("{0}={1}", p.Name.UrlEncode(), p.Value.UrlEncode());
現在以UrlEncode()方法是在StringExtensions.cs類中可用的擴展方法,它的實現是像這樣:
public static string UrlEncode(this string input)
{
return Uri.EscapeDataString(input);
}
的問題是,烏里.EscapeDataString無法處理字符串超過65519個字符(看帖子 - Uri.EscapeDataString() - Invalid URI: The Uri string is too long)
如果以UrlEncode擴展方法是這樣
012實現我的問題是可以解決的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()時忽略它自己的擴展方法,而是調用我的擴展方法?
任何幫助,非常感謝。謝謝。
如果您將有效載荷附加到查詢字符串以執行POST,那麼您做錯了... – arootbeer
我不能說這是否是正確的方法,但這是OSS,因此您可以隨時對源進行更改並提出請求。至少,你可以創建一個自定義版本 –