Asp.net web api 为什么我的分块请求缺少结束的CRLF?

Asp.net web api 为什么我的分块请求缺少结束的CRLF?,asp.net-web-api,multipart,chunked-encoding,Asp.net Web Api,Multipart,Chunked Encoding,在过去的10个小时里,我一直在试图弄清楚为什么我的http请求在我做一个测试时失败了 request.Content.ReadAsMultipartAsync().Result.Contents 它不断返回错误: Unexpected end of MIME multipart stream. MIME multipart message is not complete. 经过数小时的研究,我终于发现请求没有结束的CRLF,显然.Net需要确定请求的结束。当我添加自己的CRLF时,一切都很顺

在过去的10个小时里,我一直在试图弄清楚为什么我的http请求在我做一个测试时失败了

request.Content.ReadAsMultipartAsync().Result.Contents
它不断返回错误:

Unexpected end of MIME multipart stream. MIME multipart message is not complete.
经过数小时的研究,我终于发现请求没有结束的CRLF,显然.Net需要确定请求的结束。当我添加自己的CRLF时,一切都很顺利

在WireShark中,我查看了其中一个请求,我看到分块请求确实有一个结束CRLF,但反分块请求没有

这就给我留下了两个问题

  • 为什么我的请求缺少结尾的CRLF,以及
  • 有没有办法在它进入.Net之前将其添加回去,以便.Net能够正确地处理它?或者,我可以告诉.Net不要寻找结尾的CRLF吗

  • 在分块模式的最后一块中圈出的两个CRLF是
    分块
    传输编码的一部分,该编码在每个分块中的字节数之后指定一个CRLF(请求/响应实体的最后一块中为零),在整件事之后指定一个额外的CRLF(参见RFC 2616,第3.6.1节)。MIME multipart(RFC 2046,第5.1.1节)在最后一个边界之后不需要CRLF,因此您从中接收实体的服务在没有添加实体时不会出错。旧的.NET多部分解析器拒绝了它。ASP.NET团队去年年底成立,因此您只需要使用最新的
    System.NET.Http.Formatting
    (ASP.NET WebApi客户端库5.1.0应该可以)。如果您绝对不能使用最新的程序集,那么为了解决这个问题,我会用一个特殊的包装器流来包装底层流,该包装器流提供后续的CRLF。

    不幸的是,要升级到最新的api,我必须升级到.Net 4.5,这意味着要升级到EF6,这在这个项目中是一项巨大的工作。我已经完全按照你的建议做了,我正在对字节进行原始读取,附加一个CRLF,然后解析多部分。谢谢你的解释。