ASP.NET Comment diffuser un fichier à l’utilisateur

Au départ, j’essayais de comprendre la différence entre Response.Close et Response.End, mais après avoir fait plus de recherches sur Google et sur Google, il est clair que je n’ai pas vu de manière commune l’envoi d’un Byte [] au client. Je vais laisser l’exemple de code ci-dessous, mais j’aimerais savoir quelle est la norme de l’indussortinge en la matière.

Byte[] myBytes = GetReportBytes(); HttpContext.Current.Response.ClearContent(); HttpContext.Current.Response.AppendHeader("content-length", myBytes.Length.ToSsortingng()); HttpContext.Current.Response.AppendHeader("content-Disposition", "attachment;filename=" + this.ReportFileName + GetReportExtension()); HttpContext.Current.Response.ContentType = GetApplicationContentType(); HttpContext.Current.Response.BinaryWrite(myBytes); HttpContext.Current.Response.Flush(); HttpContext.Current.Response.Close(); //CERT FIX //HttpContext.Current.Response.End(); 

Je n’appellerais pas Response.Close() ou Response.End() .

Response.End() arrêtera l’exécution / le rendu de la page à ce stade. Aucun code suivant Response.End() ne sera exécuté. La réponse est terminée à ce moment-là sans qu’aucune sortie supplémentaire ne soit ajoutée au stream.

Response.Close() est similaire à Response.End() , mais permet l’exécution du code après son appel (mais aucune sortie supplémentaire ne peut être envoyée dans la réponse de la page).

Response.Flush() enverra les éléments de réponse restants à la page.

D’un membre de l’équipe de base IIS :

Response.Close envoie un paquet de réinitialisation au client et son utilisation dans une situation autre qu’une erreur entraînera toutes sortes de problèmes – par exemple, si vous parlez à un client avec une latence suffisante, le paquet de réinitialisation peut provoquer la mise en mémoire tampon d’autres données de réponse. sur le serveur, le client ou quelque part entre les deux.

Dans ce cas particulier, la compression implique la recherche de modèles communs dans la réponse et une certaine quantité de réponse doit être mise en mémoire tampon par le code de compression pour augmenter les chances de trouver des modèles répétitifs plus longs. Cette partie mise en mémoire tampon ne peut pas être envoyée au client une fois que vous avez terminé. faire Response.Close ().

En bref, n’utilisez pas Response.Close ().