Renvoi d'un fichier PDF à partir d'une API Web ASP.NET
Dans les contrôleurs MVC standard, renvoyer un PDF à l'aide de FileContentResult
est simple. Cependant, ApiController
nécessite une approche différente.
Le problème
L'utilisation du type de retour IHttpActionResult
typique dans ApiController
présente des défis lors du retour d'un PDF. Le simple fait de renvoyer un StreamContent
, comme le suggèrent certains exemples, entraîne souvent l'affichage par le navigateur des en-têtes au lieu du fichier PDF lui-même.
La bonne méthode
La clé est d'utiliser ByteArrayContent
au lieu de StreamContent
. Cela convertit les données du flux en un tableau d'octets pour une transmission correcte. Voici un exemple amélioré :
<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>
Ce code utilise ByteArrayContent
pour envoyer le PDF sous forme de tableau d'octets. Surtout, il définit l'en-tête ContentDisposition
sur attachment
(indiquant au navigateur de télécharger le fichier) et le ContentType
sur application/octet-stream
(indiquant un fichier binaire). Cela garantit que le PDF est correctement téléchargé au lieu d'être affiché dans le navigateur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!