Pregunta

Recibí un error extraño con response.redirect() y el proyecto no se estaba construyendo en absoluto.cuando me quité el trata de atraparlo bloque que rodeaba el bloque de código donde Response.Redirect() estaba dentro funcionó normalmente..

Sólo quiero saber si se trata de un problema conocido o algo así...

¿Fue útil?

Solución

Si recuerdo correctamente, Response.Redirect() lanza una excepción para abortar la solicitud actual (ThreadAbortedException o algo así).Entonces podrías estar detectando esa excepción.

Editar:

Este artículo de la base de conocimientos describe este comportamiento (también para el Request.End() y Server.Transfer() métodos).

Para Response.Redirect() existe una sobrecarga:

Response.Redirect(String url, bool endResponse)

si pasas endResponse=false, entonces no se lanza la excepción (pero el tiempo de ejecución continuará procesando la solicitud actual).

Si endResponse=true (o si se utiliza la otra sobrecarga), se lanza la excepción y la solicitud actual finalizará inmediatamente.

Otros consejos

Como señala Martin, Response.Redirect lanza una ThreadAbortException. La solución es volver a emitir la excepción:

try  
{
   Response.Redirect(...);
}
catch(ThreadAbortException)
{
   throw; // EDIT: apparently this is not required :-)
}
catch(Exception e)
{
  // Catch other exceptions
}

Martin es correcta, un ThreadAbortException se tira cuando se utiliza un Response.Redirect, consulte el artículo kb aquí

Es posible que haya hecho referencia a una variable que se declara dentro del bloque try.

Por ejemplo, el código siguiente es válido:

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

Usted debe salir a la declaración b fuera del bloque try-catch.

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

No creo que haya ningún problema conocido aquí.

Simplemente no se puede hacer una redirección () dentro de un bloque try / catch porque redirección deja el control actual a otro .aspx (por ejemplo), lo que deja la captura en el aire (no se puede volver a ella) .

EDIT: Por otra parte, yo podría haber tenido todo esto figurado hacia atrás. Lo sentimos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top