Estoy usando framework compacto/C# en Windows Mobile.Uri.EscapeDataString() - URI no válido: la cadena Uri es demasiado larga
En mi aplicación, estoy cargando datos en el servidor serializando objetos y utilizando una solicitud HttpWebRequest/POST para enviar la información. En el servidor, los datos de la publicación se deserializan y se guardan en la base de datos.
El otro día me di cuenta de que tenía un problema con los caracteres especiales en los datos de la publicación (ampersands, etc.). Así que introduje Uri.EscapeDataString() en el método y todo estaba bien.
Sin embargo, hoy he descubierto que hay un problema cuando la aplicación intenta cargar una gran cantidad de datos (no estoy seguro de lo que denota exactamente "grande" en el momento!)
Código existente (tipo de)
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()));
Problema
la llamada a Uri.EscapeDataString() está causando la siguiente excepción:
System.UriFormatException: URI no válido: la cadena Uri es demasiado larga.
Pregunta
¿Hay otras maneras de preparar los datos para la carga?
Por lo que puedo ver, HttpUtility (que tiene sus propios métodos Encode/Decode) no está disponible para el marco compacto.
¿Podría escribir que es su propia implementación? 'EscapeDataString()' parece en su mayoría convincente ... hacer un 'String.Replace' normal basado en una biblioteca de caracteres que necesitan escaparse? – Smudge202
Estados Msdn: UriFormatException: la longitud de stringToEscape supera 32766 caracteres. – fluent
Como sugirió Smudge202, simplemente escribí mi propia implementación. – ETFairfax