Проблема
Проблема в этой строке:
Response.OutputStream.Write(mswithPage.GetBuffer(), 0, mswithPage.GetBuffer().Length)
Еще точнее, ее окончательный аргумент mswithPage.GetBuffer().Length
- вам следует использовать число фактически используемых байтов в буфере, но вы используете размер полного буфера.
решение
Таким образом, вместо этого используйте mswithPage.Length
:
Response.OutputStream.Write(mswithPage.GetBuffer(), 0, mswithPage.Length)
... и если MemoryStream
уже закрыт
Если MemoryStream
уже закрыт, приведенное выше решение больше не работает, поскольку его свойство Length
можно использовать только в открытых потоках..
Что работает с закрытыми потоками, так это метод ToArray
!Таким образом, вместо этого вы можете использовать
Response.OutputStream.Write(mswithPage.ToArray())
(На самом деле забавно, что ToArray
работает на закрытых потоках, но Length
нет. В конце концов, ToArray
по существу возвращает копию первого Length
много байтов внутреннего буфера ...)