У меня есть приложение для iPad, которое отправляет заказы на веб-сайт ASP.NET MVC через форму сообщения. Он публикует JSON, который может быть достаточно большим для отправки с мобильного устройства (200 ~ 300 КБ) при определенных условиях. Я могу GZip пост формы, но затем мой asp.net mvc задыхается от gzipped контента.
Как мне обработать сообщение формы GZipped в asp.net mvc?
UPDATE:
Ответ Дарина ставит меня на правильный путь, но я до сих пор не знаю, как сделать то, что он предлагает, поэтому вот где я нахожусь:
Используйте этот код для распаковки строки:
http://dotnet -snippets.com / DNS / сжимают-и-разжимать-строки-SID612.aspx
И я получаю строку примерно так:
StreamReader reader = new StreamReader(Request.InputStream);
string encodedString = reader.ReadToEnd();
но это дает мне ошибку:
The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters.
РЕДАКТИРОВАТЬ - ЗАВЕРШЕННЫЙ КОД
Я использую asp.net MVC, и это прекрасно работает для меня. Мне также пришлось иметь дело с какой-то другой кодировкой, которая происходит, когда происходит мой gzipping:
[Authorize]
[HttpPost]
[ValidateInput(false)]
public ActionResult SubmitOrder()
{
GZipStream zipStream = new GZipStream(Request.InputStream, CompressionMode.Decompress);
byte[] streamBytes = ReadAllBytes(zipStream);
var result = Convert.ToBase64String(streamBytes);
string sample = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(result));
string escaped = Uri.UnescapeDataString(sample);
// escaped now has my form values as a string like so: var1=value1&var2=value2&ect...
//more boring code
}
public static byte[] ReadAllBytes(Stream input)
{
byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}