【问题标题】:Web API Batch requests failing in PostmanWeb API 批处理请求在 Postman 中失败
【发布时间】:2014-10-06 22:00:00
【问题描述】:

我最近在我的 Web API 项目中添加了批处理请求支持,并花了一天的大部分时间尝试使用 Postman 调试批处理请求失败的原因:Unexpected end of MIME multipart stream. MIME multipart message is not complete.

在搜索了很长一段时间并了解了trailing CRLF issue 的所有信息后,我终于使用System.Net.Http 编写了一个快速的C# 控制台应用程序,类似于here 给出的示例。这很好用!

我的问题是: 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--

控制台应用程序:(带有额外的邮递员标题)

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--

我确实注意到了一个区别:在 Postman 中,Content-Length 标头从 553(已发布)更改为 528(捕获时)...不确定这是否与我的问题有关...

【问题讨论】:

    标签: asp.net-web-api request httprequest postman


    【解决方案1】:

    对此有一些问题,但我使用的是 Fiddler。似乎空的返回字符有所不同:

    这似乎也是您的 Postman 请求和控制台应用程序之间的区别。

    【讨论】:

    • 为您的答案投了赞成票,这很可能是问题所在。我们实际上并没有最终使用批处理请求解决方案,所以很遗憾我没有任何方法来测试和确认这一点。但也许这会帮助其他人......所以谢谢! :)
    猜你喜欢
    • 2023-02-09
    • 1970-01-01
    • 2012-05-10
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 2012-12-29
    • 1970-01-01
    相关资源
    最近更新 更多