2011-08-29 2 views
6

Je tente d'effectuer une redirection HTTP 302, mais en obtenant l'exception suivante pendant que je cours en mode débogage.Http Redirect 302

Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack 

var response = HttpContext.Current.Response; 
response.Clear(); 
response.Status = "302 Found"; 
response.AddHeader("Location", "http://google.com"); 
response.End(); 
response.Flush(); 

Longue histoire courte, cet appel n'est pas le rinçage de la réponse et non la redirection.

Comment puis-je obtenir ce fonctionnement?

+0

Avez-vous compilé votre application en mode débogage et en cours d'exécution comme cela ou avez-vous compilé votre application en mode édition et en attachant simplement le débogueur au processus? – Icarus

+0

Jetez un oeil ici aussi bien http://automagical.rationalmind.net/2010/03/08/response-redirect-and-302-and-301-status-codes/ –

Répondre

7

Vous ne devriez pas appellerez à la fois End et Flush de cette manière - pour rediriger avec HTTP 302, vous devez utiliser HttpContext.Current.Response.Redirect voir http://msdn.microsoft.com/en-us/library/a8wa7sdt.aspx

+0

est-ce 302 rediriger? cela a fonctionné pour moi, mais je ne sais pas si c'est 302 – DarthVader

+0

OUI - il est, voir le lien vers MSDN dans ma réponse ... – Yahia

+0

@ user177883 s'il vous plaît ne pas oublier de upvote/marquer comme accepté toute réponse qui était d'aide ... – Yahia

4

L'objet HttpResponse a une méthode pour effectuer une redirection 302.

Response.Redirect("page.aspx") 

Bien que votre code devrait fonctionner correctement car c'est une voie commune pour mettre en œuvre un 301 redirect.

Notez que response.Flush() est redondant lorsque le tampon de réponse est vidé vers le client et que l'exécution se termine sur response.End(), de sorte que cette ligne ne sera pas exécutée.

Une recherche google pour d'autres personnes avec similar problems indique cet article de la base de connaissances http://support.microsoft.com/kb/312629/EN-US/ qui est susceptible d'être la cause de vos problèmes.

+0

est-ce 302 redirection? cela a fonctionné pour moi, mais je ne sais pas si c'est 302 – DarthVader

+0

Oui c'est selon la documentation, vous pouvez utiliser quelque chose comme firebug ou fiddler pour vérifier. –

Questions connexes