Trong một bộ điều khiển MVC thông thường, chúng ta có thể xuất pdf bằng a FileContentResult
.
public FileContentResult Test(TestViewModel vm)
{
var stream = new MemoryStream();
//... add content to the stream.
return File(stream.GetBuffer(), "application/pdf", "test.pdf");
}
Nhưng làm thế nào chúng ta có thể thay đổi nó thành một ApiController
?
[HttpPost]
public IHttpActionResult Test(TestViewModel vm)
{
//...
return Ok(pdfOutput);
}
Đây là những gì tôi đã thử nhưng nó dường như không hoạt động.
[HttpGet]
public IHttpActionResult Test()
{
var stream = new MemoryStream();
//...
var content = new StreamContent(stream);
content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
content.Headers.ContentLength = stream.GetBuffer().Length;
return Ok(content);
}
Kết quả trả về được hiển thị trong trình duyệt là:
{"Headers":[{"Key":"Content-Type","Value":["application/pdf"]},{"Key":"Content-Length","Value":["152844"]}]}
Và có một bài tương tự trên SO: Trả lại tệp nhị phân từ bộ điều khiển trong ASP.NET Web API . Nó nói về đầu ra một tập tin hiện có. Nhưng tôi không thể làm cho nó hoạt động với một luồng.
Bất kỳ đề xuất?