Tốt hơn để trở HttpResponseMessage với StreamContent bên trong của nó.
Dưới đây là ví dụ:
public HttpResponseMessage GetFile(string id)
{
if (String.IsNullOrEmpty(id))
return Request.CreateResponse(HttpStatusCode.BadRequest);
string fileName;
string localFilePath;
int fileSize;
localFilePath = getFileFromID(id, out fileName, out fileSize);
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StreamContent(new FileStream(localFilePath, FileMode.Open, FileAccess.Read));
response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = fileName;
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
return response;
}
UPD từ bình luận bằng patridge: bất cứ ai khác nên đến đây tìm cách để gửi ra một phản ứng từ một mảng byte thay vì một tập tin thực tế, bạn sẽ muốn sử dụng ByteArrayContent mới (someData) thay vì StreamContent (xem here).
"API Web"? Chính xác ý của bạn là gì? Vui lòng đọc http://tinyurl.com/so-hints và chỉnh sửa câu hỏi của bạn. –
@JonSkeet: API Web là một tính năng mới trong phiên bản mới nhất của ASP.NET. Xem http://www.asp.net/whitepapers/mvc4-release-notes#_Toc317096197 –
@Robert: Cảm ơn - thẻ làm cho nó rõ ràng hơn, mặc dù đề cập đến "ASP.NET Web API" sẽ vẫn rõ ràng hơn. Lỗi của một phần MS đối với tên chung chung của rác quá :) –