我在Windows Mobile上使用紧凑型框架/C#。
在我的应用程序中,我通过序列化对象并使用HttpWebRequest/POST请求向上发送信息,从而将数据上传到服务器。在服务器上,帖子数据被反序列化并保存到数据库中。
前几天,我意识到我在帖子数据中出现特殊字符(“&”符号等)时遇到了问题。因此,我将Uri.EscapeDataString()引入该方法,一切都很好。
但是,今天我发现,当应用程序尝试上传大量数据时存在一个问题(我不确定目前确切表示“大”!)
现有代码(种类)
var uploadData = new List<Things>();
uploadData.Add(new Thing() { Name = "Test 01" });
uploadData.Add(new Thing() { Name = "Test 02" });
uploadData.Add(new Thing() { Name = "Test with an & Ampersand " }); // Do this a lot!!
var postData = "uploadData=" + Uri.EscapeDataString(JsonConvert.SerializeObject(uploadData, new IsoDateTimeConverter()));
问题
对Uri.EscapeDataString()的调用导致以下异常:
问题
还有其他准备上传数据的方法吗?
据我所知,HttpUtility(具有自己的Encode/Decode方法)不适用于紧凑型框架。
最佳答案
或者,您可以简单地拆分字符串并为每个块调用Uri.EscapeDataString(string)
,以避免重新实现该功能。
示例代码:
String value = "large string to encode";
int limit = 2000;
StringBuilder sb = new StringBuilder();
int loops = value.Length / limit;
for (int i = 0; i <= loops; i++)
{
if (i < loops)
{
sb.Append(Uri.EscapeDataString(value.Substring(limit * i, limit)));
}
else
{
sb.Append(Uri.EscapeDataString(value.Substring(limit * i)));
}
}