domingo, 14 de febrero de 2010

Error de response.redirect.

Interesante y molesto error en asp.net cuando realizas un response.redirect y devuelve un error.

Eliminando la causa de que estés haciendo una redirección cíclica, como por ejemplo poner el redirect en la masterpage y apuntando a una página hija suya. Lo más seguro es que te falte configurar las capacidades de redirección HTTP en el servidor IIS – si lo estás probando en un Win7.

image

Si lo activas, dejará de salirte el error.

4 comentarios:

Julípides dijo...

Hola...

Ahora no tengo el código a mano, pero la excepción que produce (¿te refieres a la de rotura del flujo de ejecución, no?) se puede evitar también con el segundo parámetro que admite, el booleano. No sé si te acordarás de la impresión de facturas, pero lo tuve que modificar allí para Metro e hice este cambio.

Creo que recordar que vi un post tuyo sobre el Team Foundation, así que voy a buscar. ¿Has usado los web deployment projects con VS2008?

Juan Quijano dijo...

Anda, no sabía lo del segundo parámetro del redirect. aún no usado lo de los web deployment, pero los utilizaré en este último proyecto en el que estoy.

Mil gracias!!

Julípides dijo...

A mi me lo tuvo que contar Lázaro. Se supone que se debería poner siempre para evitar esas excepciones (que no se detectan en un try catch normal, tienes que capturar un Abort-NoSéQué-Exception si nicesitas hacerlo), pero por costumbre, ni yo las pongo.

Luego si tengo ocasión, te pego el código (me tendría que conectar por Citrix a Metro, y algunas veces me falla un buen rato).

Oye, pues si descubres y usas los WDP con VS2008 postea algo, porque todo lo que encuentro se suele resumir en "al final funciona como en VS2005, así que os pongo el tutorial del 2005". Y algunas cosas que se parecen como un huevo a una casta. Por ejemplo, no he encontrado como coño modifcar o elegir un web.config distinto en función del entorno en el que estés. En el 2005 se ve enseguida, en el 2008 no.

Julípides dijo...

Encontré una copia del proyecto

'// Regrabar el DataSet en el Session
Session(Facturas.dsProcesadas) = Nothing
Session(Facturas.dsProcesadas) = dsFacturasProcesar.Copy

'// Recargar la página (como si fuera una llamada recursiva)
Me.Fila += 1
'...OJO, que la llamada recursiva provoca una excepción de
' tipo "System.Threading.ThreadAbortException" si no se
' pasa el segundo parámetro como False
Response.Redirect(String.Concat(Paginas.HBDescargar, "?fila=", Me.Fila.ToString), False)

Catch ex As Exception
'// Por aquí no entraría y sin embargo hay excepción

msjError = String.Concat("Error al descargar factura del gestor documental. Fila=", (Me.Fila - 1).ToString)
End Try