gpt4 book ai didi

c# - Uri.EscapeDataString() - 无效的 URI : The Uri string is too long

转载 作者:IT王子 更新时间:2023-10-29 04:12:51 27 4
gpt4 key购买 nike

我在 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: The Uri string is too long.

问题

还有其他方法可以准备上传数据吗?

据我所知,HttpUtility(它有自己的编码/解码方法)不适用于紧凑型框架。

最佳答案

或者您可以简单地拆分您的字符串并为每个 block 调用 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)));
}
}

关于c# - Uri.EscapeDataString() - 无效的 URI : The Uri string is too long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6695208/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com