Почему мой фрагментарный запрос удаляет завершающий 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, а у запроса де-порции - нет.

Chunked vs Dechunked request

Так что у меня остается 2 вопроса.

  1. Почему в моем запросе отсутствует конечный CRLF, и
  2. Есть ли способ добавить его обратно до того, как он попадет в.Net, чтобы.Net правильно его обработал?

1 ответ

'0' CRLF CRLF в конце является частью кодирования по частям и корректно удаляется Wireshark, когда выдает данные по частям. Мне кажется, проблема в том, что для кодирования MIME требуется свой собственный CRLF в дополнение к тем, которые добавляются в кодированном кодировании.

Трудно сказать, в чем именно заключается проблема, но мне кажется, что вы можете искать не в том месте.

Другие вопросы по тегам