Używam interfejsu API sieci Web ASP.NET .
Chcę pobrać plik PDF z C # z API (który generuje API).
Czy mogę po prostu poprosić API o zwrócenie byte[]
? a dla aplikacji C # mogę po prostu zrobić:
byte[] pdf = client.DownloadData("urlToAPI");?
i
File.WriteAllBytes()?
c#
asp.net-web-api
Kyle
źródło
źródło
Odpowiedzi:
Lepiej jest zwrócić HttpResponseMessage z zawartością StreamContent.
Oto przykład:
UPD z komentarza patridge : Jeśli ktoś inny przyjdzie tutaj, aby wysłać odpowiedź z tablicy bajtów zamiast rzeczywistego pliku, będziesz chciał użyć nowego ByteArrayContent (someData) zamiast StreamContent (patrz tutaj ).
źródło
new ByteArrayContent(someData)
zamiastStreamContent
(patrz tutaj ).Wykonałem następującą akcję:
źródło
Przykład z
IHttpActionResult
inApiController
.Jeśli nie chcesz pobierać pliku PDF i korzystać z przeglądarki wbudowanej w przeglądarkę PDF, zamiast tego usuń następujące dwie linie:
źródło
var file = GetFile(id);
.file.SomeData
jest Byte Array (byte[]
) ifile.FileName
jeststring
.Uwaga dla
.Net Core
: Możemy użyćFileContentResult
i ustawić contentType na,application/octet-stream
jeśli chcemy wysłać nieprzetworzone bajty. Przykład:źródło
FileContentResult
wezwanieFileDownloadName
do określenia nazwy plikuZastanawiałem się, czy istnieje prosty sposób na pobranie pliku w bardziej… „ogólny” sposób. Wymyśliłem to.
Jest to proste
ActionResult
, które pozwoli ci pobrać plik z wywołania kontrolera, które zwraca plikIHttpActionResult
. Plik jest przechowywany w formaciebyte[] Content
. W razie potrzeby możesz przekształcić go w strumień.Użyłem tego do zwrócenia plików przechowywanych w kolumnie varbinary bazy danych.
źródło