Heim >Backend-Entwicklung >C++ >Wie kann ich Dateien in der ASP.NET-Web-API ordnungsgemäß zurückgeben?
Gibt Dateien in der ASP.NET-Web-API korrekt zurück
In ASP.NET MVC ist die Rückgabe von Dateien mithilfe der Klasse FileContentResult
sehr einfach. Bei der Verwendung von WebAPI ist der Ansatz jedoch anders.
An WebAPI anpassen
WebAPI verwendet unterschiedliche Konventionen und erfordert unterschiedliche Rückgabetypen. Um die Test
-Methode eines normalen MVC-Controllers an einen API-Controller anzupassen, müssen wir IHttpActionResult
anstelle von FileContentResult
zurückgeben.
Erste Versuche und Probleme
Der erste Versuch verwendete die Klasse StreamContent
, um einen Dateistream zurückzugeben. Obwohl Inhaltstyp und Länge festgelegt sind, wird im Browser nur der Header angezeigt.
Lösung: ByteArrayContent
Das Problem ist, dass StreamContent
nicht mit Inhalten funktioniert, die bereits aus dem Stream gelesen wurden. Stattdessen sollten wir ByteArrayContent
verwenden, das als Eingabe ein Byte-Array eines Streams verwendet.
Geänderter Code:
<code class="language-csharp">[HttpGet] public HttpResponseMessage Generate() { var stream = new MemoryStream(); // 处理流。 var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(stream.ToArray()) }; result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") { FileName = "CertificationCard.pdf" }; result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); return result; }</code>
Dieser geänderte Code gibt den Dateiinhalt korrekt als Antwort zurück und ermöglicht so das Herunterladen oder Anzeigen im Browser.
Das obige ist der detaillierte Inhalt vonWie kann ich Dateien in der ASP.NET-Web-API ordnungsgemäß zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!