Estoy usando ASP.NET Web API .
Quiero descargar un PDF con C # desde la API (que genera la API).
¿Puedo hacer que la API devuelva un byte[]? y para la aplicación C # puedo hacer:
byte[] pdf = client.DownloadData("urlToAPI");?
y
File.WriteAllBytes()?
c#
asp.net-web-api
Kyle
fuente
fuente

Respuestas:
Es mejor devolver HttpResponseMessage con StreamContent dentro.
He aquí un ejemplo:
UPD desde el comentario de patridge : si alguien más llega aquí buscando enviar una respuesta desde una matriz de bytes en lugar de un archivo real, querrá usar el nuevo ByteArrayContent (someData) en lugar de StreamContent (ver aquí ).
fuente
new ByteArrayContent(someData)lugar deStreamContent(ver aquí ).Hice la siguiente acción:
fuente
Ejemplo con
IHttpActionResultenApiController.Si no desea descargar el PDF y utilizar un navegador integrado en el visor de PDF, elimine las siguientes dos líneas:
fuente
var file = GetFile(id);.file.SomeDataes un Byte Array (byte[]) yfile.FileNameesstring.Solo una nota para
.Net Core: Podemos usarFileContentResulty establecer contentType enapplication/octet-streamsi queremos enviar los bytes sin procesar. Ejemplo:fuente
FileContentResultllamadaFileDownloadNamepara especificar el nombre del archivoMe preguntaba si había una forma sencilla de descargar un archivo de una forma más ... "genérica". Se me ocurrió esto.
Es un simple
ActionResultque le permitirá descargar un archivo de una llamada de controlador que devuelve unIHttpActionResult. El archivo se almacena en formatobyte[] Content. Puede convertirlo en una secuencia si es necesario.Usé esto para devolver archivos almacenados en la columna varbinary de una base de datos.
fuente