Peut-on utiliser la Réponse.Flush () au lieu de Response.Fin()

Response.End() génère ThreadAbortException .

utiliser HttpContext.Current.ApplicationInstance.CompleteRequest à la place ne résout pas le problème.

ainsi, pouvons-nous utiliser Response.Flush() au lieu de Response.End()

3
demandé sur Aristos 2012-05-31 11:28:15

2 réponses

le Response.Flush() est envoyé au navigateur ce qui est sur le buffer, mais n'est pas arrêter le traitement de la page, il va donc continuer l'exécution des prochaines étapes.

Ce qui est Response.End() faire est d'arrêter l'exécution des mesures sur le prochain appel de la fonction dans le asp.net Page Cycle de Vie . http://msdn.microsoft.com/en-us/library/ms178472.aspx

et c'est pourquoi il a besoin de jeter une exception, à jeter hors de la boucle de la série de l'appel.

une alternative est le Response.Close() mais ce n'est pas non plus arrêter les étapes d'exécution et vous avez probablement une autre erreur si vous essayez d'envoyer quelque chose après la fermeture de la connexion avec le navigateur. si vous faites Response.Close() vous devez également faire Flush() juste avant que vous l'appelez ou sinon le navigateur obtient des données imprévisibles.

vous pouvez aussi lire: rediriger vers une page avec endResponse à vrai VS CompleteRequest et fil de sécurité

10
répondu Aristos 2017-05-23 10:29:39

utilisez la condition avant de télécharger le fichier Response.IsClientConnected -

if (Response.IsClientConnected)
 {
    Response.Clear();
    Response.ClearContent();
    Response.ClearHeaders();
    Response.ContentType = "Application/pdf";
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);
    Response.TransmitFile(Server.MapPath(@"yourpath" + fileName));
    Response.Flush();
    Response.Close();
  }

ça marche pour moi bien après beaucoup de lutte. J'espère que ça marchera pour vous aussi.

4
répondu Viishnuu 2013-06-11 07:35:03