J'utilise Server.Transfer. Tout fonctionne bien, mais le journal des exceptions montre l'exception suivante.
System.Threading.ThreadAbortException: Thread was being aborted.
at System.Threading.Thread.AbortInternal()
at System.Threading.Thread.Abort(Object stateInfo)
at System.Web.HttpResponse.End()
at System.Web.HttpServerUtility.Transfer(String path, Boolean preserveForm)
at System.Web.HttpServerUtility.Transfer(String path)
Toute idée pour éviter l'exception ci-dessus.
Cette exception est levée par l'appel à Server.Transfer
afin d'arrêter l'exécution de la méthode actuelle - exactement la même chose est levée si vous le faites Response.Redirect
.
Les deux choix que vous avez sont:
Server.Transfer
Server.Transfer
aux endroits où il ne sera pas attrapé (recommandé)EDIT: Grattez cela, http://support.Microsoft.com/kb/312629 a quelques autres suggestions à essayez, mais je recommande toujours le n ° 2 ci-dessus.
Une autre façon de résoudre ce problème consiste à intercepter l'erreur générée et à ne pas la renvoyer:
catch (ThreadAbortException)
{
}
Ce problème se produit dans les méthodes Response.Redirect et Server.Transfer car les deux méthodes appellent Response.End en interne.
La solution à ce problème est la suivante.
Pour Server.Transfer, utilisez plutôt la méthode Server.Execute.
Visitez ce lien pour télécharger un exemple d'exemple. http://jayeshsorathia.blogspot.com/2012/03/thread-was-being-aborted-error-occured.html
Caling Server.Transfer appellera Response.End qui lève toujours une ThreadAbortException. Il s'agit d'une exception "spéciale" car bien qu'elle puisse être interceptée dans un bloc catch, elle sera toujours renvoyée à la fin du bloc catch. Je voudrais que votre journalisation des erreurs ignore les ThreadAbortExceptions.
Remplacez Response.End()
par HttpContext.Current.ApplicationInstance.CompleteRequest();
Remplacer Response.End () par ce qui suit a aidé à résoudre le problème.
Response.Flush (); Response.Close ();
Refer Peut-on utiliser Response.Flush () au lieu de Response.End ()