Web API 2 télécharger le fichier en utilisant async Task<IHttpActionResult>
J'ai besoin d'écrire une méthode comme ci-dessous pour retourner un document texte (.txt, pdf, .doc, .docx, etc)
Bien qu'il existe de bons exemples de l'affichage de fichier dans l'API Web 2.0 sur le web , je ne pouvais pas trouver un pertinente pour le simple téléchargement d'un. (Je sais comment le faire dans HttpResponseMessage.)
public async Task<IHttpActionResult> GetFileAsync(int FileId)
{
//just returning file part (no other logic needed)
}
Ne le ci-dessus doit être asynchrone à tous?
Je suis seulement à la recherche de flux retour. (C'est bon?)
Plus important avant que j'ai fini par faire le travail d'une manière ou l'otther, je voulais savoir quelle est la "bonne" façon de faire ce genre de travail... (donc, d'approches et de techniques de mentionner ce serait grandement apprécié).. merci.
Vous devez vous connecter pour publier un commentaire.
Droit, pour votre scénario ci-dessus, l'action n'a pas besoin de retourner un async action résultat. Ici, je suis entrain de créer un personnalisé IHttpActionResult. Vous pouvez vérifier mes commentaires dans le code ci-dessous ici.
X-HTTP-Method-Override
en-tête qui vous semble ne pas être à l'aide...mais vous pouvez utiliser une approche similaire de l'aide de gestionnaire de déléguer à regarder pour votre en-tête personnalisé et de modifier votre demande...avez-vous déjà essayé de tel ou avez-vous des inquiétudes au sujet de cette?config.MessageHandlers.Add(new MethodOverrideHandler());
la classe n'est pas reconnu. J'ai aussi essayé de le télécharger à partir de NuGet, mais je ne pouvais pas parce que je suis en utilisant netframework v 4.0ContentDisposition
en-tête et ce pour vous permettre de télécharger le fichier dans le navigateur.Méthodes sont asynchrones en cas de retour d'un objet Tâche, non pas parce que sont décorées avec le mot-clé async.
async n'est qu'un sucre syntaxique pour remplacer cette syntaxe de ce que peut obtenir assez complexe quand il y a plus de tâches combinées ou plusieurs continuations:
Échantillon Original avec async:
http://msdn.microsoft.com/en-us/library/hh156513.aspx
asynchrone nécessite toujours attendre, ce qui est appliquée par le compilateur.
Les deux implémentations sont asynchroous, la seule différence est que async+attendent remplace élargit le ContinueWith dans "synchrone" du code.
Retour Tâche de contrôleur de méthodes que dois-IO (99% des cas, j'ai estimation) est important parce que le runtime peut suspendre et de réutiliser le thread de demande pour répondre à d'autres demandes alors que l'opération e /s est en cours. Cela réduit les chances de manquer de pool de threads.
Voici un article sur le sujet:
http://www.asp.net/mvc/overview/performance/using-asynchronous-methods-in-aspnet-mvc-4
Donc la réponse à votre question "est-ce la ci-dessus doit être asynchrone à tous? Je suis seulement à la recherche de flux retour. (C'est bon?)" c'est qu'il ne fait pas de différence à l'appelant, il ne change la façon dont votre code ressemble (mais pas comment ça marche).