Ich verwende die ASP.NET-Web-API .
Ich möchte ein PDF mit C # von der API herunterladen (die die API generiert).
Kann ich die API einfach a zurückgeben lassen byte[]
? und für die C # -Anwendung kann ich einfach tun:
byte[] pdf = client.DownloadData("urlToAPI");?
und
File.WriteAllBytes()?
c#
asp.net-web-api
Kyle
quelle
quelle
Antworten:
Es ist besser, HttpResponseMessage mit StreamContent zurückzugeben.
Hier ist ein Beispiel:
UPD von Kommentar von patridge : Sollte jemand anderes hierher kommen, um eine Antwort von einem Byte-Array anstelle einer tatsächlichen Datei zu senden, sollten Sie anstelle von StreamContent einen neuen ByteArrayContent (someData) verwenden (siehe hier ).
quelle
new ByteArrayContent(someData)
stattdessenStreamContent
(siehe hier ) verwenden.Ich habe folgende Aktion ausgeführt:
quelle
Beispiel mit
IHttpActionResult
inApiController
.Wenn Sie die PDF-Datei nicht herunterladen und einen im PDF-Viewer integrierten Browser verwenden möchten, entfernen Sie stattdessen die folgenden zwei Zeilen:
quelle
var file = GetFile(id);
.file.SomeData
ist ein Byte Array (byte[]
) undfile.FileName
iststring
.Nur ein Hinweis für
.Net Core
: Wir können das verwendenFileContentResult
und den contentType auf setzen,application/octet-stream
wenn wir die Rohbytes senden möchten. Beispiel:quelle
FileContentResult
FileDownloadName
Ich habe mich gefragt, ob es eine einfache Möglichkeit gibt, eine Datei auf eine "allgemeinere" Weise herunterzuladen. Ich habe mir das ausgedacht.
Es ist eine einfache
ActionResult
Methode, mit der Sie eine Datei von einem Controller-Aufruf herunterladen können, der eine zurückgibtIHttpActionResult
. Die Datei wird in der gespeichertbyte[] Content
. Sie können es bei Bedarf in einen Stream verwandeln.Ich habe dies verwendet, um Dateien zurückzugeben, die in der varbinary-Spalte einer Datenbank gespeichert sind.
quelle