Zurückgeben einer PDF-Datei von einer ASP.NET-Web-API
In Standard-MVC-Controllern ist die Rückgabe einer PDF-Datei mit FileContentResult
einfach. ApiController
erfordert jedoch einen anderen Ansatz.
Das Problem
Die Verwendung des typischen Rückgabetyps IHttpActionResult
in ApiController
stellt bei der Rückgabe einer PDF-Datei eine Herausforderung dar. Die einfache Rückgabe eines StreamContent
führt, wie einige Beispiele vermuten lassen, häufig dazu, dass der Browser Kopfzeilen anstelle der PDF-Datei selbst anzeigt.
Die richtige Methode
Der Schlüssel liegt darin, ByteArrayContent
anstelle von StreamContent
zu verwenden. Dadurch werden die Stream-Daten zur ordnungsgemäßen Übertragung in ein Byte-Array umgewandelt. Hier ist ein verbessertes Beispiel:
<code class="language-csharp">[HttpGet] public HttpResponseMessage Generate() { MemoryStream stream = new MemoryStream(); // ... PDF generation code to populate the stream ... HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(stream.ToArray()) }; result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "CertificationCard.pdf" }; result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); return result; }</code>
Dieser Code verwendet ByteArrayContent
, um das PDF als Byte-Array zu senden. Entscheidend ist, dass der ContentDisposition
-Header auf attachment
gesetzt wird (womit der Browser angewiesen wird, die Datei herunterzuladen) und der ContentType
auf application/octet-stream
(was eine Binärdatei anzeigt). Dadurch wird sichergestellt, dass die PDF-Datei korrekt heruntergeladen und nicht im Browser gerendert wird.
Das obige ist der detaillierte Inhalt vonWie gebe ich ein FileContentResult (PDF) von einer ASP.NET-Web-API zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!