1

最近、Web API プロジェクトにバッチ リクエストのサポートを追加し、Postman を使用してバッチ リクエストが失敗する理由をデバッグすることに 1 日の大部分を費やしました。Unexpected end of MIME multipart stream. MIME multipart message is not complete.

かなりの時間をかけて検索し、末尾の CRLF 問題についてすべて学習した後、私は最終的に、ここSystem.Net.Httpに示されている例と同様のものを使用して、簡単な C# コンソール アプリを作成しました。これはうまくいきました!

私の質問は、バッチ リクエストが失敗する原因となる Postman の動作の違いは何ですか? fiddler を使用してリクエストをキャプチャし、次に winmerge を使用してそれらを比較します。唯一の違いは、Postman リクエストにいくつかの追加ヘッダーが含まれていることです。

User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
Cache-Control: no-cache
Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

これらのヘッダーをコンソールアプリに追加して、リクエストをまったく同じにしようとしましたが、コンソールアプリでは引き続き機能しましたが、Postman では失敗しました!

誰もが理由を知っていますか?


以下の Fiddler でキャプチャされたリクエスト:

郵便屋さん:

POST http://localhost:49402/api/sequentialBatch HTTP/1.1
Host: localhost:49402
Connection: keep-alive
Content-Length: 528
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
Cache-Control: no-cache
Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
Session-ID: 03317cfa-c051-4813-a02a-a9fa955cc7f5
Authorization: Basic c2E6c2E=
Content-Type: multipart/mixed; boundary="c3581ff4-f6eb-4c41-ac02-0bb8b80b30ef"
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

--c3581ff4-f6eb-4c41-ac02-0bb8b80b30ef
Content-Type: application/http; msgtype=request

GET /api/currency?$filter=Currency_ID eq 'Z-US$' HTTP/1.1
Host: localhost.fiddler:49402
Authorization: Basic c2E6c2E=
Session-ID: 03317cfa-c051-4813-a02a-a9fa955cc7f5

--c3581ff4-f6eb-4c41-ac02-0bb8b80b30ef
Content-Type: application/http; msgtype=request

GET /api/countrycode/US HTTP/1.1
Host: localhost.fiddler:49402
Authorization: Basic c2E6c2E=
Session-ID: 03317cfa-c051-4813-a02a-a9fa955cc7f5


--c3581ff4-f6eb-4c41-ac02-0bb8b80b30ef--

CONSOLE APP: (追加のポストマン ヘッダー付き)

POST http://localhost:49402/api/sequentialBatch HTTP/1.1
Host: localhost:49402
Connection: Keep-Alive
Content-Length: 553
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
Cache-Control: no-cache
Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
Session-ID: 03317cfa-c051-4813-a02a-a9fa955cc7f5
Authorization: Basic c2E6c2E=
Content-Type: multipart/mixed; boundary="cf2b18a3-5861-49d7-878b-142283cb4959"
Accept: */*
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US, en; q=0.8

--cf2b18a3-5861-49d7-878b-142283cb4959
Content-Type: application/http; msgtype=request

GET /api/currency?$filter=Currency_ID%20eq%20'Z-US$' HTTP/1.1
Host: localhost.fiddler:49402
Authorization: Basic c2E6c2E=
Session-ID: 03317cfa-c051-4813-a02a-a9fa955cc7f5


--cf2b18a3-5861-49d7-878b-142283cb4959
Content-Type: application/http; msgtype=request

GET /api/countrycode/US HTTP/1.1
Host: localhost.fiddler:49402
Authorization: Basic c2E6c2E=
Session-ID: 03317cfa-c051-4813-a02a-a9fa955cc7f5


--cf2b18a3-5861-49d7-878b-142283cb4959--

1 つの違いに気付きました: Postman では、Content-Lengthヘッダーが 553 (投稿時) から 528 (キャプチャ時) に変更されました...これが私の問題に関連しているかどうかはわかりません...

4

1 に答える 1

2

これにはいくつか問題がありましたが、私は Fiddler を使用していました。空のリターン文字が違いを生むようです:

http://prntscr.com/7eq1w1

これも、Postman リクエストとコンソール アプリの違いのようです。

于 2015-06-08T21:38:27.920 に答える