Comment faire pour retourner un fichier à l'aide de l'API Web?
Je suis en utilisant ASP.NET l'API Web.
Je veux télécharger un fichier PDF avec C# à partir de l'API (que l'API génère).
Puis-je avoir l'API de revenir un byte[]
? et pour l'application en C# peut je viens de faire:
byte[] pdf = client.DownloadData("urlToAPI");?
et
File.WriteAllBytes()?
- "de l'API du Web"? Que voulez-vous dire exactement? Merci de lire tinyurl.com/so-hints et modifiez votre question.
- L'API de Web est une nouvelle fonctionnalité dans la version la plus récente de ASP.NET. Voir asp.net/whitepapers/mvc4-release-notes#_Toc317096197
- Merci - la balise rend plus claire, bien que se référant à "l'ASP.NET l'API Web" aurait été plus clair encore. Partie MS faute pendant un rubbishly nom générique aussi 🙂
- blogs.msdn.com/b/codefx/archive/2012/02/23/...
- Quelqu'un qui arrive de vouloir y retourner le flux via l'api web et IHTTPActionResult puis voir ici: nodogmablog.bryanhogan.net/2017/02/...
Vous devez vous connecter pour publier un commentaire.
Mieux retourner HttpResponseMessage avec StreamContent à l'intérieur d'elle.
Ici est un exemple:
UPD de commentaire par patridge:
Quelqu'un d'autre devrait obtenir ici à la recherche d'envoyer une réponse à partir d'un tableau d'octets au lieu d'un fichier, vous allez avoir à utiliser de nouvelles ByteArrayContent(someData) au lieu de StreamContent (voir ici).
new ByteArrayContent(someData)
au lieu deStreamContent
(voir ici).ByteArrayContent
mieux queresponse.BinaryWrite
?Response.BinaryWrite
. Je devine que ce serait jeter octets dans le flux directement plutôt que de la gestion de contenu à l'aide de l'API Web de pipeline en place. Si vous avez d'autres étapes de traitement dans l'API pipeline qui doivent s'exécuter sur le contenu avant qu'il descend le fil, vous pouvez coller avecByteArrayContent
. Du mieux que je peux donner est de vous suggérer de voir ce qui fonctionne le mieux pour votre situation.fileSize
variable utilisée dans le code ci-dessus? Devrait/pourrait-il être envoyé dans les en-têtes de réponse?J'ai fait le suivi de l'action:
Exemple avec
IHttpActionResult
dansApiController
.Si vous ne voulez pas télécharger le PDF et utiliser un des navigateurs construit visionneuse de documents PDF au lieu de supprimer les deux lignes suivantes:
var file = GetFile(id);
.file.SomeData
est un Tableau d'Octets (byte[]
) etfile.FileName
eststring
.Juste une note pour
.Net Core
: Nous pouvons utiliser laFileContentResult
et définir le contentType àapplication/octet-stream
si nous voulons envoyer les octets brutes. Exemple: