J'utilise l' API Web ASP.NET .
Je souhaite télécharger un PDF avec C # depuis l'API (que l'API génère).
Puis-je simplement demander à l'API de renvoyer un byte[]
? et pour l'application C #, puis-je simplement faire:
byte[] pdf = client.DownloadData("urlToAPI");?
et
File.WriteAllBytes()?
c#
asp.net-web-api
Kyle
la source
la source
Réponses:
Mieux vaut retourner HttpResponseMessage avec StreamContent à l'intérieur.
Voici un exemple:
UPD du commentaire de patridge : Si quelqu'un d'autre arrive ici pour envoyer une réponse à partir d'un tableau d'octets au lieu d'un fichier réel, vous allez vouloir utiliser le nouveau ByteArrayContent (someData) au lieu de StreamContent (voir ici ).
la source
new ByteArrayContent(someData)
place deStreamContent
(voir ici ).J'ai fait l'action suivante:
la source
Exemple avec
IHttpActionResult
inApiController
.Si vous ne souhaitez pas télécharger le PDF et utiliser un navigateur intégré à la visionneuse PDF, supprimez les deux lignes suivantes:
la source
var file = GetFile(id);
.file.SomeData
est un tableau d'octets (byte[]
) et l'file.FileName
eststring
.Juste une note pour
.Net Core
: Nous pouvons utiliser leFileContentResult
et définir le contentType surapplication/octet-stream
si nous voulons envoyer les octets bruts. Exemple:la source
FileContentResult
appeléeFileDownloadName
pour spécifier le nom du fichierJe me suis demandé s'il y avait un moyen simple de télécharger un fichier d'une manière plus ... "générique". Je suis venu avec ça.
C'est un simple
ActionResult
qui vous permettra de télécharger un fichier à partir d'un appel de contrôleur qui renvoie un fichierIHttpActionResult
. Le fichier est stocké dans lebyte[] Content
. Vous pouvez le transformer en flux si nécessaire.Je l'ai utilisé pour renvoyer des fichiers stockés dans la colonne varbinary d'une base de données.
la source