Comment diffuser avec ASP.NET de Base
La façon de bien le flux de réponse dans ASP.NET Core?
Il y a une manette qui ressemble à ceci (mise à JOUR du CODE):
[HttpGet("test")]
public async Task GetTest()
{
HttpContext.Response.ContentType = "text/plain";
using (var writer = new StreamWriter(HttpContext.Response.Body))
await writer.WriteLineAsync("Hello World");
}
Firefox/Edge navigateurs montrent
Bonjour Tout Le Monde
Chrome/Facteur signaler une erreur:
La page localhost ne fonctionne pas
localhost de façon inattendue a fermé la connexion.
ERR_INCOMPLETE_CHUNKED_ENCODING
P. S. je suis sur le point de diffuser un grand nombre de contenu, donc je ne peux pas spécifier le Contenu de la Longueur d'en-tête à l'avance.
OriginalL'auteur Dmitry Nogin | 2017-03-13
Vous devez vous connecter pour publier un commentaire.
Pour diffuser une réponse qui doit apparaître dans le navigateur comme un fichier téléchargé, vous devez utiliser
FileStreamResult
:Stream
- il est SomeReader ou IEnumerable. J'ai besoin d'uneStream
adaptateur ensuite, ce qui est assez lourd. Est-il un moyen facile de simplement écrire àResponse.Body
? P. S. Il fonctionne dans Chrome pour certains gars 🙂J'ai écrit un
FileCallbackResult
que peut faire ce que vous avez besoin.OriginalL'auteur Stephen Cleary
Je me demandais bien comment faire, et ont trouvé que
la question d'origine du code fonctionne réellement OK sur
ASP.NET Core 2.1.0-rc1-final
, ni Chrome (et de quelques autres navigateurs), ni JavaScript de l'application ne manqueront pas, avec une telle extrémité.Mineur choses que je voudrais ajouter sont simplement définir StatusCode et à proximité du Flux de la réponse à apporter la réponse remplies:
using
déclarations sont nécessaires? Ne pas ASP.NET de Base en disposer pour vous. Au lieu de cela, je m'attends à ce que vous devez appelerStreamWriter.Close
de sorte que le résultat final devient rouge. (Dispose
n'a pas de couleur.)OriginalL'auteur ivandz
Il est possible de retourner
null
ouEmptyResult()
(qui sont l'équivalent), même si déjà écrit àResponse.Body
. Il peut être utile si la méthode renvoieActionResult
pour être en mesure d'utiliser tous les autres résultats aswell (par exempleBadQuery()
) facilement.Veuillez essayer d'ajouter quelques explications pour répondre à cela peut aider
J'ai ajouté une explication dans la réponse.
Downvoting. Pour commencer, l'exemple de code ne produira pas de résultats streaming - comme l'était la question. Au lieu de cela il uniquement les flux de données dans un tampon de réponse... Pas vraiment utile pour la diffusion d'une réponse. Deuxièmement, l'explication qui est là n'est pas vraiment pertinent.
OriginalL'auteur Martin Staufcik
quelque chose comme ça pourrait fonctionner:
bon point, j'ai répondu trop vite, tout en faisant d'autres choses
Toujours pas bon, parce que, techniquement, le cours d'eau n'obtiendrez pas lire à la fin de cette méthode est de retour. Toutefois, étant donné qu'un
MemoryStream
'sDispose
ne pas jeter le contenu du flux, vous allez sortir avec elle ici. Avec de vrais IO, vous n'aurez probablement pas être aussi chanceux....en fait,
FileStreamResult
dispose le flux a été adoptée quand elle a fini. Leusing
déclaration est ici tout à fait superflue.OriginalL'auteur Joe Audette