HttpListenerをのみ)(jQuery.ajaxを使用してInputStreamの最初の900のバイトを取得します

StackOverflow https://stackoverflow.com/questions/3443179

質問

私は、AJAXリクエストを経由して、ブラウザからのHTTP POSTを受信するHttpListenerをを使用して非常に単純なクラスを持っています。

:私はこの問題を浮き彫りにデモを含めました
private static void HandleRequest(HttpListenerContext context)
{
    using (var inputStream = context.Request.InputStream)
    {
        for (int i = 0; i < context.Request.ContentLength64; i++)
        {
            Console.WriteLine("{0}:\t{1}", i, inputStream.ReadByte());
        }
    }
 }

私もFirefoxの(jQueryのを使用して)で、次のJavascriptを使用します:

upload_html: function(html){
   jQuery.ajax({
            type: 'POST',
            data: html,
            url: 'http://localhost:8080/api/html?url=' + escape(content.document.location),
            success: function(data) {
                 // do stuff
            }
   });
}
私がいる問題は、Firefoxから送信されたときのInputStreamがしかの周りに900バイトが含まれていることです。私はFirefoxと私のアプリ間のフィドラーを配置する場合、それは正しく、すべての9900バイトのデータを送信します。私のアプリへのFirefoxから直接送信するときしかし、(UTF8ので、900バイトとしてエンコード)のみ最初の900の文字が送信されます。

私は私のアプリにデータを投稿するカールを使用する場合は、

は、それが完璧に動作します。フィドラーはまた、私のアプリにデータを投稿することができ、それを正しく読んでいます。フィドラーは、Firefoxからそれに投稿されたデータを読み取ることができますが、私のアプリではないことができます。

HTMLの異なるサイズで、異なる量が送信されますが、それは一貫して同じページに同じサイズですされています。サイズに関係なく、それが送られた899〜999バイトの間、常にです。ページが900バイト未満の場合、それが動作し、正しく入力ストリームからすべてのデータを読み込みます。

私が持っていた一説

は、それが1024のバイトを送信するかもしれませんが、HTTPヘッダはこれらのバイトの一部を消費したことだったが、HTTPヘッダー〜120バイトよりもかなり大きいです。

は、私が言及する必要があります。の一つは、このJSがインポートjQueryを使ってFirefoxの拡張機能内から実行されていることです。私はこれと同じ問題が発生したように、ページ内から同じJavascriptを実行しているとき、私は、それがものの、問題を引き起こしているとは思わない。

役に立ちましたか?

解決

ReadToEnd私の作品

_RequestBody  = new StreamReader(_Context.Request.InputStream).ReadToEnd();

などのバイナリコンテンツのためにこれを行います。

var memoryStream = new MemoryStream();
var buffer = new byte[0xFFFF];
Stream stream = _Context.Request.InputStream;

int i = 0;
do {
  i = stream.Read(buffer, 0, 0xFFFF);
  memoryStream.Write(buffer, 0, i);
} while (i > 0);
memoryStream.Flush();
memoryStream.Position = 0;
return memoryStream;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top