2010-12-06 13 views
12

Tuve este error El hilo estaba siendo abortado., esta tarde en mi registro de errores.Response.Redirect y thread was been aborted error?

El código que provocó este error es:

Response.Redirect("Login.aspx", true); 

Si cambio el valor bool-false, el registro de errores se vacía y este error deja de venir de nuevo, pero el programa deja de funcionar.

Si sigo como tal, estoy consiguiendo este error como molestia.

Quiero saber la alternativa para usar Response.Redirect pasando true como el valor para el parámetro endResponse.

+2

Revisa http://msdn.microsoft.com/en-us/library/a8wa7sdt(VS.80).aspx – Mike

+1

Respose.Redirect llamará a Response.End internamente, puede ser suprimido usando 'false' (Response.Redirect (Login.aspx, false);). Pero no debería hacer que el programa deje de funcionar. – wizzardz

+1

Puede detener el funcionamiento del programa si se procesa otra lógica después de la redirección que de lo contrario no se procesaría si se hubiera producido la excepción. –

Respuesta

17

capto esta excepción y tragarlo porque ASP.NET está utilizando excepciones para el control de flujo en lugar de para una circunstancia excepcional.

try 
{ 
    // Do stuff. 
} 
catch(ThreadAbortException) 
{ 
    // Do nothing. ASP.NET is redirecting. 
    // Always comment this so other developers know why the exception 
    // is being swallowed. 
} 
catch(OtherExceptionTypes ex) 
{ 
    // Log other types of exception. 
} 
+0

¿Qué se imprimirá en el registro de errores si utilizo la excepción de hilo en lugar de la excepción común? –

+0

Si atrapa y traga la excepción, nada, porque ninguna excepción llega al punto donde se registra. También parece que necesita leer sobre cómo funcionan las excepciones. –

+0

Lo siento, no lo instalé.neto en mi sistema de casa. Así que estaba en duda. –

2

puede cambiar como esto Response.Redirect ("Login.aspx", false) entonces no lo puedo abortar.

3

Como se indica en Response.Redirect(url) Solución ThreadAbortException:

El ThreadAbortException se inicia cuando se realiza una llamada a Response.Redirect(url) porque el sistema aborta el procesamiento de la corriente hilo página Web después de que se envía el redireccionamiento a la respuesta corriente. Response.Redirect(url) realmente hace una llamada a Response.End() internamente, y es Response.End() que llama a Thread.Abort() que sube la pila para finalizar el hilo. En circunstancias excepcionales el llamada a Response.End() realidad no llama Thread.Abort(), pero en lugar llama HttpApplication.CompleteRequest().

O simplemente mueva Response.Redirect("~/Membership/UserRegistration.aspx"); fuera del bloque Try/Catch.

1

Para todos los errores atrapados en las que desea volver a dirigir, crear un 'Ir A' con destino fuera del intento de captura de la siguiente manera:

Try 

     'do stuff 

    Catch ex As Exception 

     'logging 
     GoTo MyRedirection 

    End Try 

    'Prevent redirection in case of no errors 
    Exit Sub 

MyRedirection: 
    Response.Redirect("login.aspx", True) 

Esto no provoca aborto hilo ni requiere múltiples capturas.

Cuestiones relacionadas