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
IHttpActionResult
enApiController
.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.SomeData
es un Byte Array (byte[]
) yfile.FileName
esstring
.Solo una nota para
.Net Core
: Podemos usarFileContentResult
y establecer contentType enapplication/octet-stream
si queremos enviar los bytes sin procesar. Ejemplo:fuente
FileContentResult
llamadaFileDownloadName
para 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
ActionResult
que 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