Lepiej wrócić HttpResponseMessage z StreamContent wewnątrz niego.
Oto przykład:
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 z komentarzem przez patridge: Gdyby ktoś się tu chce wysłać odpowiedź z tablicy bajtów zamiast rzeczywistego pliku, masz zamiar chcesz użyć nowej ByteArrayContent (someData) zamiast StreamContent (patrz here).
„API Web”? Co dokładnie masz na myśli? Przeczytaj http://tinyurl.com/so-hints i edytuj swoje pytanie. –
@ JonSkeet: Web API to nowa funkcja w najnowszej wersji ASP.NET. Zobacz http://www.asp.net/whitepapers/mvc4-release-notes#_Toc317096197 –
@Robert: Dzięki - tag czyni go wyraźniejszym, chociaż nawiązanie do "interfejsu API ASP.NET Web" byłoby jeszcze wyraźniejsze. Częściowo wina MS z powodu banalnie ogólnej nazwy :) –