Я использую MigraDoc для создания PDF, он отлично сохраняется на локальном компьютере, но когда я отправляю этот файловый поток на webapi, браузер открывает его с пустым содержимым.
var response = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StreamContent(new MemoryStream(pdfByteArray))
};
response.Content.Headers.ContentDisposition =
new ContentDispositionHeaderValue("attachment")
{
FileName = "MyPdf.pdf"
};
response.Content.Headers.ContentType =
new MediaTypeHeaderValue(@"application/pdf")
response.Content.Headers.ContentLength = pdfByteArray.Length;
return response;
Когда я открываю инструменты разработчика в Chrome, я вижу, что некоторые символы ответа выглядят так:
Хотя, когда я пытаюсь создать локальный файл, используя тот же поток байтов:
using (Stream stream = File.Create(@"d:\work\Test.pdf"))
{
new MemoryStream(pdfByteArray).CopyTo(stream);
}
Он правильно отображает содержимое PDF.
Я пытался указать другой CharSet в Response Content-Type (например, UTF-7, UTF-8, windows-1252 и т. д.) и вижу, что символы ответа изменены, но результат тот же - я вижу пустой PDF. Еще одно замечание: когда я отправляю Json с pdfByteArray, закодированным в Base64, в пользовательском интерфейсе я могу декодировать это и создавать правильный PDF. Я пытаюсь найти способ отправить содержимое приложения/pdf и позволить браузеру правильно отображать PDF.
Content-Disposition
inline
вместоattachment
? - person Falco Alexander   schedule 04.03.2020HttpResponseMessage
. Не делай этого. - person Nkosi   schedule 04.03.2020