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 ?
Erreur Impossible de rediriger après l'envoi des en-têtes HTTP.
System.Web.HttpException (0x80004005) : Impossible de rediriger après l'envoi des en-têtes HTTP.
Suggestion
Si nous utilisons asp.net mvc et travaillons sur le même contrôleur et redirigeons vers des actions différentes, alors vous n'avez pas besoin d'écrire
Response.Redirect("ActionName", "ControllerName") ;
il est préférable d'utiliser uniquement
return RedirectToAction("ActionName") ;
ou
return View("ViewName") ;
Mon problème a été résolu en ajoutant le gestionnaire d'exception pour gérer "Cannot redirect after HTTP headers have been sent". Cette erreur est représentée par le code suivant
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");}
Il y a deux façons de résoudre ce problème :
Il suffit d'ajouter un return
après votre Response.Redirect(someUrl);
( si la signature de la méthode n'est pas "void", vous devrez retourner ce "type", bien sûr ) ainsi :
Response.Redirect("Login.aspx") ;
retour ;
Notez que le retour permet au serveur d'effectuer la redirection... sans lui, le serveur veut continuer à exécuter le reste de votre code...
Response.Redirect(someUrl)
la DERNIÈRE instruction exécutée dans la méthode qui déclenche l'exception. Remplacez votre Response.Redirect(someUrl)
avec une chaîne VARIABLE nommée "someUrl", et la définir sur l'emplacement de la redirection... comme suit ://......some code
string someUrl = String.Empty
.....some logic
if (x=y)
{
// comment (original location of Response.Redirect("Login.aspx");)
someUrl = "Login.aspx";
}
......more code
// Déplacez votre Response.Redirect vers ICI (la fin de la méthode) :
Response.Redirect(someUrl);
return;
Désolé, mais cela n'a aucun sens pour moi. Que devrait faire (dans une méthode à retour nul) cette redondante return
faire ? Le site return
définit seulement que la méthode est terminée. Mais quand il n'y a plus de code, la méthode est quand même terminée. Et le fait de stocker une url dans une variable ne change rien, je veux dire : pourquoi le ferait-on ? La chaîne est la même. La chose compilée ne fait aucune différence entre une chaîne de caractères et une variable contenant une chaîne de caractères... : pensez à x = 5
Donc x est 5 mais 5 est aussi 5. Même 10/2 serait 5... cela ne fait aucune différence.
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.