87 votes

Pourquoi est-ce que je reçois le message "Impossible de rediriger après l'envoi des en-têtes HTTP" lorsque j'appelle Response.Redirect ()?

Lorsque j'appelle Response.Redirect(someUrl) j'obtiens une exception HttpException: "Impossible de rediriger après l'envoi des en-têtes HTTP".

Pourquoi je reçois ça? Et comment puis-je résoudre ce problème?

121voto

Samuel Meacham Points 5058

Selon la documentation MSDN pour Response.Redirect(string url), il va jeter un HttpException quand "une redirection est tenté après les en-têtes HTTP ont été envoyés". Depuis Response.Redirect(string url) utilise le Http "Emplacement" en-tête de réponse (http://en.wikipedia.org/wiki/HTTP_headers#Responses), il va provoquer les en-têtes pour être envoyé au client. Cela signifie que si vous appelez ça une deuxième fois, ou si vous appelez après que vous avez causé les en-têtes d'être envoyé dans une autre manière, vous aurez la HttpException.

Une façon de se prémunir contre d'appel de Réponse.Redirect() plusieurs fois est de vérifier l' Response.IsRequestBeingRedirected de la propriété (bool) avant de l'appeler.

// Causes headers to be sent to the client (Http "Location" response header)
Response.Redirect("http://www.stackoverflow.com");
if (!Response.IsRequestBeingRedirected)
	// Will not be called
	Response.Redirect("http://www.google.com");

17voto

Philip Rieck Points 21405

Une fois que vous envoyer tout contenu à tout pour le client, les en-têtes HTTP ont déjà été envoyés. Une "Réponse.Redirect()" appel fonctionne en envoyant des informations dans les en-têtes qui font que le navigateur demande une URL différente.

Depuis les en-têtes ont déjà été envoyés, asp.net ne pouvez pas faire ce que vous voulez (modifier les en-têtes)

Vous pouvez contourner ce problème en un), soit de la Redirection avant de faire quoi que ce soit d'autre, ou b) de s'essayer à l'aide de la Réponse.Tampon = true avant de faire quoi que ce soit d'autre, assurez-vous qu'aucun de sortie est envoyé au client jusqu'à ce que l'ensemble de la page est effectuée en cours d'exécution.

8voto

Mark Cidade Points 53945

Une redirection ne peut se produire que si la première ligne d'un message HTTP est " HTTP/1.x 3xx Redirect Reason ".

Si vous avez déjà appelé Response.Write() ou défini des en-têtes, il sera trop tard pour une redirection. Vous pouvez essayer d'appeler Response.Headers.Clear() avant la redirection pour voir si cela vous aide.

1voto

SamsonOnNet Points 1

Mon problème a été résolu en ajoutant le gestionnaire d'exception pour gérer "Impossible de rediriger une fois les en-têtes HTTP envoyés". cette erreur comme indiqué ci-dessous code

 catch (System.Threading.ThreadAbortException)
        {
            // To Handle HTTP Exception "Cannot redirect after HTTP headers have been sent".
        }
        catch (Exception e)
        {//Here you can put your context.response.redirect("page.aspx");}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X