2017-02-20 7 views
0

Dans une méthode OnClick pour un bouton dans un formulaire Web ASP.NET, j'ai un appel à Response.Redirect() ce qui provoque le système d'interrompre le fil avec le message d'erreur:"Exception levée: 'System.Threading.ThreadAbortException' dans mscorlib.dll" lors de l'utilisation de Response.Redirect()

Exception thrown: 'System.Threading.ThreadAbortException' in mscorlib.dll 

Il y a quelques questions semblables à ce ici, en utilisant leurs solutions que j'ai changé:

Response.Redirect("~/UI/Home.aspx"); 

à

Response.Redirect("~/UI/Home.aspx", false); 
Context.ApplicationInstance.CompleteRequest(); 

Cependant, j'ai toujours le même problème. En utilisant le débogueur, j'ai parcouru le code et tout s'est exécuté avec succès jusqu'à ce que j'appelle Response.Redirect() ;.

Surclic Fonction

protected void btnLogin_Click(object sender, EventArgs e) 
    { 
     SiteUser s = null; 
     try 
     { 
      string email = txtEmail.Text; 
      string pwd = txtPwd.Text; 
      s = DBConnection.login(email, pwd);     
     } 
     catch (Exception ex) 
     { 
      Console.Write(ex); 
      lblLoginError.Text = "Error logging in."; 
     } 
     if (s != null) 
     { 
      Session["UserSession"] = s; 
      Response.Redirect("~/UI/Home.aspx", false); 
      Context.ApplicationInstance.CompleteRequest(); 
     } 
     else 
     { 
      lblLoginError.Text = "User not found. Please check your details and try again."; 
     } 
    } 

Toute réflexion sur pourquoi cela pourrait se produire?

+1

'Response.Redirect()' * ne devrait vraiment pas être * lancer cette exception quand étant donné l'argument 'false' ... – David

+0

double possible de [Pourquoi Response.Redirect provoque System.Threading.ThreadAbortException ?] (http://stackoverflow.com/questions/2777105/why-response-redirect-causes-system-threading-threadabortexception) –

+0

@Am_I_Helpful Problème très similaire mais qui n'est pas résolu par les solutions. –

Répondre

1

J'ai vu ce problème dans le passé. En théorie, si vous utilisez ce code, il ne devrait pas se produire:

Response.Redirect(url, false); 
Context.ApplicationInstance.CompleteRequest(); 

Cela étant dit, je suis encore parfois ces, ce qui est vraiment surprenant. Je devine qu'il se produit parfois en présence d'un bloc finally actif pour signaler que le code commence à se nettoyer, bien que cela ne semble pas être le cas pour vous.

La meilleure solution que je pourrais trouver est d'attraper l'erreur et de l'ignorer.

protected void btnLogin_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     SiteUser s = null; 
     try 
     { 
      string email = txtEmail.Text; 
      string pwd = txtPwd.Text; 
      s = DBConnection.login(email, pwd);     
     } 
     catch (Exception ex) 
     { 
      Console.Write(ex); 
      lblLoginError.Text = "Error logging in."; 
     } 
     if (s != null) 
     { 
      Session["UserSession"] = s; 
      Response.Redirect("~/UI/Home.aspx", false); 
      Context.ApplicationInstance.CompleteRequest(); 
     } 
     else 
     { 
      lblLoginError.Text = "User not found. Please check your details and try again."; 
     } 
    } 
    catch(System.Threading.ThreadAbortException) 
    { 
     //Do nothing. The exception will get rethrown by the framework when this block terminates. 
    } 
} 
+0

Merci pour la réponse! Malheureusement, cela ne semble pas résoudre le problème - il suffit toujours de recharger la page de connexion. –

0

Cela est avéré être un problème que je l'avais fait en redirigeant retour si la session ne contenait pas un élément spécifique dans la page cible, et dans ce cas, il n'a pas! L'exception est toujours levée mais ne provoque plus de problèmes visibles.

Merci