2009-10-19 8 views
3

Que se passera-t-il dans le scénario suivant? Va-t-il lancer le travail après response.redirect?response.redirect et jeter dans le bloc catch

Ou dois-je utiliser Response.Redirect dans le bloc de capture de la méthode principale où il jette la pile d'appels d'exception ....

try 
{  
//code 
} 
catch(Exception ex) 
{  
Response.Redirect("Error.aspx"); 
throw;  
} 
+0

Pourquoi ne pas essayer? Question intéressante cependant. –

Répondre

7

Puisque vous ne fournit pas le paramètre pour indiquer si la page en cours devrait continuer à s'exécuter, il terminera automatiquement la page en appelant End(). L'utilisation de la méthode avec un seul paramètre revient à appeler la méthode avec deux paramètres, la seconde (endResponse) étant définie sur true. Depuis End() entraîne une exception levée, il n'atteindra jamais votre instruction throw.

Référence: http://msdn.microsoft.com/en-us/library/a8wa7sdt.aspx

Lorsque vous utilisez cette méthode dans une page gestionnaire de mettre fin à une demande d'une la page et commencer une nouvelle demande de une autre page, définissez endResponse true ou appelez le Redirect surcharge de méthode. Cette méthode appelle Fin pour la demande d'origine, qui génère une exception ThreadAbortException lors de l'achèvement de .

Si vous souhaitez que la page pour continuer à vous exécuter besoin d'utiliser la signature avec deux paramètres et définir le paramètre endResponse à false.

3

Si vous appelez Response.Redirect (sans la surcharge), il doit immédiatement arrêter l'exécution et le lancement ne sera donc pas déclenché.

Cependant, si vous utilisez la surcharge et passez en faux, par exemple. Response.Redirect("Error.aspx", false) puis il continuera l'exécution de la page, puis rediriger.

(Au moins, c'est ma compréhension de the documentation).