私は、フォームポスト経由でASP.NET MVC Webサイトに注文を送信するiPadアプリを持っています。 JSONを投稿しています.JSONは、特定の条件下でモバイルデバイスが送信する(200〜300K)ためにかなり大きいことがあります。私はフォームのポストをGZipすることができますが、その後、gzipの内容についてはasp.net mvcのチョークを行います。どのように処理し、asp.net MVCでGZip形式のポストを収縮するのですか?
asp.net mvcでGZippedフォームのポストを処理するにはどうすればよいですか?
UPDATE:
ダーリンの答えは右のトラックに私を置きますが、私はまだ彼が示唆するものを行う方法が分からないので、私が午前のはここです:
文字列を解凍するには、このコードを持っています:
http://dotnet-snippets.com/dns/compress-and-decompress-strings-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.
EDIT - 完成したコード
私は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();
}
}
どのように投稿データを圧縮しますか?あなたはそれをjavascriptでライブ圧縮しますか? – Aristos
iOSアプリケーションで投稿データを圧縮しています。これはASIHttpRequestを使用しているライブラリのオプションです。http://allseeing-i.com/ASIHTTPRequest/ – Slee