private static List <byte[]> GetMultiPartParts(byte[] rawBody, string multipPartBoundary) { if (rawBody == null) { throw new ArgumentNullException("rawBody"); } List <byte[]> messageBodies = new List <byte[]>(); using (MemoryStream stream = new MemoryStream(rawBody)) { bool lastMultipartBoundaryEncountered; int startLocation = MessagePart.FindPositionOfNextMultiPartBoundary(stream, multipPartBoundary, out lastMultipartBoundaryEncountered) + ("--" + multipPartBoundary + "\r\n").Length; while (!lastMultipartBoundaryEncountered) { int stopLocation = MessagePart.FindPositionOfNextMultiPartBoundary(stream, multipPartBoundary, out lastMultipartBoundaryEncountered) - "\r\n".Length; if (stopLocation <= -1) { stopLocation = (int)stream.Length - "\r\n".Length; lastMultipartBoundaryEncountered = true; if (startLocation >= stopLocation) { break; } } int length = stopLocation - startLocation; byte[] messageBody = new byte[length]; Array.Copy(rawBody, startLocation, messageBody, 0, length); messageBodies.Add(messageBody); startLocation = stopLocation + ("\r\n--" + multipPartBoundary + "\r\n").Length; } } return(messageBodies); }