Estou usando o ASP.NET Web API .
Quero baixar um PDF com C # da API (que a API gera).
Posso apenas fazer com que a API retorne um byte[]
? e para o aplicativo C #, posso apenas fazer:
byte[] pdf = client.DownloadData("urlToAPI");?
e
File.WriteAllBytes()?
c#
asp.net-web-api
Kyle
fonte
fonte
Respostas:
Melhor retornar HttpResponseMessage com StreamContent dentro dele.
Aqui está um exemplo:
UPD do comentário de patridge : Se alguém mais chegar aqui procurando enviar uma resposta de uma matriz de bytes em vez de um arquivo real, você vai querer usar novo ByteArrayContent (someData) em vez de StreamContent (veja aqui ).
fonte
new ByteArrayContent(someData)
vez deStreamContent
(veja aqui ).Eu fiz a seguinte ação:
fonte
Exemplo com
IHttpActionResult
emApiController
.Se você não quiser fazer o download do PDF e usar um navegador integrado ao visualizador de PDF, remova as duas linhas a seguir:
fonte
var file = GetFile(id);
.file.SomeData
é um Byte Array (byte[]
) efile.FileName
éstring
.Apenas uma observação
.Net Core
: podemos usar oFileContentResult
e definir o contentType comoapplication/octet-stream
se quisermos enviar os bytes brutos. Exemplo:fonte
FileContentResult
chamadaFileDownloadName
para especificar o nome do arquivoTenho me perguntado se existe uma maneira simples de baixar um arquivo de uma forma mais ... "genérica". Eu vim com isso.
É um processo simples
ActionResult
que permite baixar um arquivo de uma chamada de controlador que retorna umIHttpActionResult
. O arquivo é armazenado nobyte[] Content
. Você pode transformá-lo em um fluxo, se necessário.Usei isso para retornar arquivos armazenados na coluna varbinary de um banco de dados.
fonte