9
votes

Y a-t-il quelque chose qui empêche la réponse.redirect de travailler à l'intérieur du bloc d'essais?

J'ai eu une erreur bizarre avec réponse.redirect () et le projet ne consistait pas du tout. Quand j'ai supprimé le bloc try-capit-catch qui entoure Le bloc de code où réponse.redirect () était fonctionné normalement ..

Voulez-vous juste savoir s'il s'agit d'un problème connu ou de quelque chose ...


3 commentaires

Pouvez-vous poster le code qui ne construirait pas?


@Fredrik: Je suis d'accord sur la plupart des réponses ici ne peuvent que deviner qu'à ce qui se passe. L'action continue d'une filetabortexception peut être liée mais difficile à dire sans l'erreur en réalité survenue et le même code exemple.


Son code ne compile même pas, pourquoi parlons-nous de jeter et d'attraper le filabortexception?


5 Réponses :



4
votes

Comme Martin pointe, Response.redirect jette une exception threadabortex. La solution consiste à ré-jeter l'exception: xxx


4 commentaires

Vous n'avez réellement besoin de ré-jeter la phrase threadabortexception. L'exécution sera automatiquement résouée de toute façon à la fin du bloc de capture. Voir la section Remarques de msdn.microsoft.com/en-us / Bibliothèque / ...


Il n'est pas nécessaire de repousser cette exception, après chaque essai, le bloc de capture a traité cette exception, l'exception est de toute façon par le CLR de toute façon. Vous ne pouvez arrêter que cela en appelant fil .Resetabort () mais je ne le recommanderais pas.


OK :-) Mais vous devez toujours attraper la filetabortexception séparément (ou vérifier le type de l'exception manuellement)


L'article de KB que Nathan Koop Links a le moyen recommandé de gérer cela en appelant une surcharge différente de la méthode de réponse.ReDirect ().



3
votes

Martin est correct, une exception threadabortException est lancée lorsque vous utilisez une réponse.redirect, voir le Article KB ici


0 commentaires

-3
votes

Je ne pense pas qu'il y ait un problème connu ici.

Vous ne pouvez tout simplement pas faire une redirection () à l'intérieur d'un bloc d'essai / attraper, car la redirection laisse la commande actuelle à une autre .aspx (par exemple), qui laisse la capture dans l'air (ne peut y reviens) .

Edit: D'autre part, j'ai pu avoir tout cela en arrière. Désolé.


2 commentaires

Ce n'est pas correct. Lorsque vous appelez Response.redirect (), une exception threadabortex est lancée, qui peut être attrapée.


Ouais, j'ai oublié de penser que pendant que je tapais :), mes excuses.



0
votes

Vous avez peut-être fait référence à une variable déclarée à l'intérieur du bloc d'essai.

Par exemple, le code ci-dessous n'est pas valide: P>

var b = false;
try
{
  b = bool.Parse("Yeah!");
}
catch (Exception ex)
{
  if (b)
  {
    Response.Redirect("somewhere else");
  }
}


0 commentaires