【发布时间】:2011-10-05 10:19:29
【问题描述】:
我在 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() 的调用导致以下异常:
System.UriFormatException: Invalid URI: Uri 字符串太长。
问题
还有其他方法可以准备要上传的数据吗?
据我所知,HttpUtility(它有自己的编码/解码方法)不适用于紧凑型框架。
【问题讨论】:
-
你可以编写你自己的实现吗?
EscapeDataString()似乎主要是方便...根据需要转义的字符库做一个普通的String.Replace? -
Msdn 声明:UriFormatException - stringToEscape 的长度超过 32766 个字符。
-
按照 Smudge202 的建议,我只是编写了自己的实现。
-
发布这个实现怎么样?
-
我会发布实现,但它有点结痂!!我最近改用接受的答案。
标签: c# exception-handling httpwebrequest compact-framework uri