C# MIME多部分流意外结束。MIME多部分消息不完整

C# MIME多部分流意外结束。MIME多部分消息不完整,c#,python,asp.net,asp.net-web-api,asp.net-web-api2,C#,Python,Asp.net,Asp.net Web Api,Asp.net Web Api2,我正在尝试使用mime/多部分请求构造一个由多个子请求组成的http请求。这是我的客户代码: def build_request( url, type, headers, data = {}): request = MIMEBase("application", "http") #Build appropriate request if type == "get": request.data = Request('GET', url, headers=

我正在尝试使用mime/多部分请求构造一个由多个子请求组成的http请求。这是我的客户代码:

def build_request( url, type, headers, data = {}):

    request = MIMEBase("application", "http")

    #Build appropriate request
    if type == "get":
        request.data = Request('GET', url, headers=headers)

    elif type == "post":
        request.data = Request('POST', url, data = json.dumps(data), headers = {'Content-Type':'application/http'})

    elif type == "delete":
        request.data = Request('DELETE', url, headers = {'Content-Type':'application/http'})

    elif type == "put":
        request.data = Request('PUT', url, data = json.dumps(data), headers = {'Content-Type':'application/http'})

    elif type == "patch":
        request.data = Request('PATCH', url, data = json.dumps(data), headers = {'Content-Type':'application/http'})

    return request

if __name__ == '__main__':

    url = "http://localhost:65200/api";

    #Get customers
    get_customers = build_request( url + "/Customers", "get", headers)

    #Add a customer
    add_customer = build_request( url + "/Customers", "post", data=added_customer, headers=headers)

    #update a customer
    update_customer = build_request( url + "/Customers/{0}".format(updated_customer["Id"]), "put", data=updated_customer, headers=headers)

    #Remove a customer
    remove_customer = build_request( url + "/Customers/{0}".format(removed_customer["Id"]), "delete", headers=headers)

    s = Session()

    uuid = uuid.uuid4()

    message = MIMEMultipart("mixed", "batch_{0}".format(uuid), [get_customers,add_customer,update_customer,remove_customer])

    headers = {'Content-Type':'multipart/mixed; boundary=\"{0}\"'.format(uuid)}


    #Error here    
    reply = requests.post(url + "/batch", data = message.as_string(), headers=headers)
错误:

“{”消息“:“发生错误。”,“异常消息”:“意外” MIME多部分流结束。MIME多部分消息不可用 完成“,”异常类型“:”System.IO.IOException“,”StackTrace“:”位于 System.Net.Http.Formatting.Parsers.MimemMultiPartBodyPartParser.d\u 0.MoveNext()\r\n 在 System.Net.Http.HttpContentMultipartExtensions.d\u 8.MoveNext()\r\n--- 来自引发异常的上一个位置的堆栈结束跟踪 ---\r\n在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n位于 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n位于 System.Runtime.CompilerServices.TaskWaiter.GetResult()\r\n位于 System.Net.Http.HttpContentMultipartExtensions.d_u0
1.MoveNext()\\r\\n---
来自引发异常的上一个位置的堆栈结束跟踪
---\\r\\n在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务
任务)\\r\\n在
System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务
任务)\\r\\n在
System.Runtime.CompilerServices.TaskAwaiter
1.GetResult()\r\n位于 System.Web.Http.Batch.DefaultHttpBatchHandler.d\u 13.MoveNext()\r\n--- 来自引发异常的上一个位置的堆栈结束跟踪 ---\r\n在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n位于 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n位于 System.Runtime.CompilerServices.TaskWaiter
1.GetResult()\\r\\n位于
System.Web.Http.Batch.DefaultHttpBatchHandler.d\u 1.MoveNext()\\r\\n---
来自引发异常的上一个位置的堆栈结束跟踪
---\\r\\n在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务
任务)\\r\\n在
System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务
任务)\\r\\n在
System.Runtime.CompilerServices.TaskAwaiter
1.GetResult()\r\n位于 System.Web.Http.Batch.HttpBatchHandler.d_u0.MoveNext()“}”

有人知道如何解决这个问题吗

捕获的fiddler会话:

POST http://localhost:65200/api/batch HTTP/1.1
Host: localhost:65200
Content-Length: 535
Content-Type: multipart/mixed; boundary="7ef5c2df-3aa4-4e8c-bb47-8c9105bc3457"
Accept-Encoding: gzip, deflate, compress
Accept: */*
User-Agent: python-requests/2.1.0 CPython/2.7.6 Windows/7

Content-Type: multipart/mixed;
 boundary="batch_7ef5c2df-3aa4-4e8c-bb47-8c9105bc3457"
MIME-Version: 1.0

--batch_7ef5c2df-3aa4-4e8c-bb47-8c9105bc3457
Content-Type: application/http
MIME-Version: 1.0


--batch_7ef5c2df-3aa4-4e8c-bb47-8c9105bc3457
Content-Type: application/http
MIME-Version: 1.0


--batch_7ef5c2df-3aa4-4e8c-bb47-8c9105bc3457
Content-Type: application/http
MIME-Version: 1.0


--batch_7ef5c2df-3aa4-4e8c-bb47-8c9105bc3457
Content-Type: application/http
MIME-Version: 1.0


--batch_7ef5c2df-3aa4-4e8c-bb47-8c9105bc3457--
HTTP/1.1 500 Internal Server Error
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcbXJ5YW4uQVNBVklFXERvY3VtZW50c1xWaXN1YWwgU3R1ZGlvIDIwMTNcUHJvamVjdHNcQmF0Y2hTYW1wbGVcQmF0Y2hTYW1wbGVcYXBpXGJhdGNo?=
X-Powered-By: ASP.NET
Date: Mon, 28 Apr 2014 15:31:48 GMT
Content-Length: 2075

{"Message":"An error has occurred.","ExceptionMessage":"Unexpected end of MIME multipart stream. MIME multipart message is not complete.","ExceptionType":"System.IO.IOException","StackTrace":"   at System.Net.Http.Formatting.Parsers.MimeMultipartBodyPartParser.<ParseBuffer>d__0.MoveNext()\r\n   at System.Net.Http.HttpContentMultipartExtensions.<MultipartReadAsync>d__8.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()\r\n   at System.Net.Http.HttpContentMultipartExtensions.<ReadAsMultipartAsync>d__0`1.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n   at System.Web.Http.Batch.DefaultHttpBatchHandler.<ParseBatchRequestsAsync>d__13.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n   at System.Web.Http.Batch.DefaultHttpBatchHandler.<ProcessBatchAsync>d__1.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n   at System.Web.Http.Batch.HttpBatchHandler.<SendAsync>d__0.MoveNext()"}
POSThttp://localhost:65200/api/batch HTTP/1.1
主机:本地主机:65200
内容长度:535
内容类型:多部分/混合;边界=“7ef5c2df-3aa4-4e8c-bb47-8c9105bc3457”
接受编码:gzip、deflate、compress
接受:*/*
用户代理:python请求/2.1.0 CPython/2.7.6 Windows/7
内容类型:多部分/混合;
boundary=“批次号为7ef5c2df-3aa4-4e8c-bb47-8c9105bc3457”
MIME版本:1.0
--批次_7ef5c2df-3aa4-4e8c-bb47-8c9105bc3457
内容类型:应用程序/http
MIME版本:1.0
--批次_7ef5c2df-3aa4-4e8c-bb47-8c9105bc3457
内容类型:应用程序/http
MIME版本:1.0
--批次_7ef5c2df-3aa4-4e8c-bb47-8c9105bc3457
内容类型:应用程序/http
MIME版本:1.0
--批次_7ef5c2df-3aa4-4e8c-bb47-8c9105bc3457
内容类型:应用程序/http
MIME版本:1.0
--批次_7ef5c2df-3aa4-4e8c-bb47-8c9105bc3457--
HTTP/1.1500内部服务器错误
缓存控制:没有缓存
Pragma:没有缓存
内容类型:application/json;字符集=utf-8
过期:-1
服务器:Microsoft IIS/8.0
X-AspNet-Version:4.0.30319
X-SourceFiles:=?UTF-8?B?QZPCVxNLCNNCBXJ5YW4UQVNBVKLFXERVY3VTZW50C1XWAXN1YWGU3R1ZGLVIDWIDIWMTNCUHJVAMVJDHNCQMF0Y2HTYW1WBGVCQMF0Y2HTYW1WBGVCYXBxGJHDGNO=
X-Powered-By:ASP.NET
日期:2014年4月28日星期一15:31:48 GMT
内容长度:2075
{“Message”:“出现错误。”,“ExceptionMessage”:“MIME多部分流意外结束。MIME多部分消息未完成。”,“ExceptionType”:“System.IO.IOException”,“StackTrace”:“at System.Net.Http.Formatting.Parsers.MimemMultipartBodyPartParser.d_0.MoveNext()\r\n at System.Net.Http.HttpContentMultipartExtensions.d_8.MoveNext()\r\n---从引发异常的上一个位置开始的堆栈结束跟踪----\r\n在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务任务)\r\n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务任务任务)\r\n在System.Runtime.CompilerServices.TaskAwaiter.GetResult()\r\n在System.Net.Http.HttpContentMultipartExtensions.d_u0`1.MoveNext()\r\n---从引发异常的上一个位置开始的堆栈结束跟踪----\r\n在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务任务)\r\n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务任务任务)\r\n在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n在System.Web.Http.Batch.DefaultHttpBatchHandler.d\u 13.MoveNext()\r\n---从引发异常的上一个位置开始的堆栈结束跟踪----\r\n在System.Runtime.CompilerServices.TaskAwaiter.ThrowForOnSuccess(任务任务)\r\n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n在System.Web.Http.Batch.DefaultHttpBatchHandler.d_1.MoveNext()上\r\n----从引发异常的上一个位置开始的堆栈结束跟踪----\r\n在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务任务)\r\n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务任务任务)\r\n在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n位于System.Web.Http.Batch.HttpBatchHandler.d\uu 0.MoveNext()“}

您使用的是Web API 2还是2.1+。请尝试使用2.1,让我知道它是否仍然存在。刚刚签入NuGet,我正在使用2.1,我还更新了所有已安装的软件包-获得了与您共享fiddler会话相同的信息?我已使用捕获的会话更新了我的帖子(我以前没有使用fiddler,因此如果您需要更多信息,请告诉我)