mejor volver HttpResponseMessage con StreamContent dentro de ella.
Aquí es ejemplo:
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 del comentario de patridge: En caso de cualquier otra persona llegar hasta aquí en busca de enviar una respuesta por parte de una matriz de bytes en lugar de un archivo real, vas a desea utilizar el nuevo ByteArrayContent (someData) en lugar de StreamContent (consulte here).
"la Web API"? Qué quieres decir exactamente? Por favor, lea http://tinyurl.com/so-hints y edite su pregunta. –
@JonSkeet: Web API es una nueva característica en la última versión de ASP.NET. Ver http://www.asp.net/whitepapers/mvc4-release-notes#_Toc317096197 –
@Robert: Gracias - la etiqueta lo hace más claro, aunque referirse a "ASP.NET Web API" hubiera sido más claro aún. En parte, la culpa de MS también es un nombre genérico: –