Quand j'appelle Response.Redirect(someUrl)
J'obtiens l'exception HttpException suivante :
Impossible de rediriger après l'envoi des en-têtes HTTP.
Pourquoi est-ce que je reçois ça ? Et comment puis-je résoudre ce problème ?
Quand j'appelle Response.Redirect(someUrl)
J'obtiens l'exception HttpException suivante :
Impossible de rediriger après l'envoi des en-têtes HTTP.
Pourquoi est-ce que je reçois ça ? Et comment puis-je résoudre ce problème ?
Selon la documentation MSDN pour Response.Redirect(string url)
Si l'on utilise la fonction de redirection, une exception HttpException sera levée si "une redirection est tentée après l'envoi des en-têtes HTTP". Puisque Response.Redirect(string url)
utilise l'en-tête de réponse Http "Location" ( http://en.wikipedia.org/wiki/HTTP_headers#Responses ), son appel entraînera l'envoi des en-têtes au client. Cela signifie que si vous l'appelez une deuxième fois, ou si vous l'appelez après avoir fait en sorte que les en-têtes soient envoyés d'une autre manière, vous obtiendrez une exception HttpException.
Une façon de se prémunir contre le fait d'appeler Response.Redirect() plusieurs fois est de vérifier l'adresse de l'utilisateur. Response.IsRequestBeingRedirected
(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");
Ouaip, exactement. Cela se produit assez facilement avec ASP.NET MVC 4 et les filtres d'exception, etc. Vous ne pouvez pas non plus modifier le code de statut de réponse HTTP une fois qu'une redirection 301/302 a été émise.
Dès que vous envoyez un contenu quelconque au client, les en-têtes HTTP ont déjà été envoyés. A Response.Redirect()
fonctionne en envoyant des informations spéciales dans les en-têtes qui font que le navigateur demande une URL différente.
Comme les en-têtes ont déjà été envoyés, asp.net ne peut pas faire ce que vous voulez (modifier les en-têtes).
Vous pouvez contourner ce problème a) en effectuant la redirection avant de faire quoi que ce soit d'autre, ou b) en essayant d'utiliser la fonction Response.Buffer = true
avant de faire quoi que ce soit d'autre, pour s'assurer qu'aucune sortie n'est envoyée au client tant que l'ensemble de la page n'a pas été exécuté.
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éfinir 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 aide.
Vérifiez simplement si vous avez réglé l'option de mise en mémoire tampon sur false (par défaut, elle est true). Pour que response.redirect fonctionne,
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.