2011-01-13 30 views
7

¿Es necesario llamar Response.End() después de Response.Redirect (url)llamando Response.End() después de Response.Redirect()

actualización

Gracias por todas las respuestas. Debido a que algunas respuestas dicen que es necesaria y otros dicen que no, he buscado más y he encontrado en el recuadro de comentarios msdn lo siguiente:

redirigir las llamadas de extremo que plantea una excepción ThreadAbortException al finalizar.

+0

que tenía esto en mi publicación –

+0

@ m.edmondson: Sí, y le doy +1 y la acepta :) No he visto su respuesta antes de encontrar la respuesta en msdn. Es por eso que busqué recientemente y escribí mi actualización. – HCL

+1

Ver relacionado [response-end-considered-harmful] (http://stackoverflow.com/questions/1087777/is-response-end-considered-harmful) –

Respuesta

11

Response.Redirect llamadas Response.End para usted

No estoy de acuerdo con su buena práctica: conduce a un código engañoso.

MSDN:

redirigir las llamadas de extremo que plantea una excepción ThreadAbortException al finalizar.

Las leyes de HTTP explican que una vez que se realiza una respuesta se envía al servidor (no más código se llama)

-1

Necesario o no, sigue siendo una buena práctica llamar a Response.End() al final de la respuesta. Ciertamente no le hará daño a nada tampoco.

+0

Duele porque su código está desordenado; no se llamará nada después de Response .Redirect() ¿por qué tenerlo allí? –

+1

En realidad, duele cosas. Response.End funciona lanzando una ThreadAbortException. Esto puede tener todo tipo de efectos secundarios desagradables en su aplicación. Uno que he golpeado es que una transacción de TransactionScope no se eliminó del almacenamiento local de subprocesos, por lo que la próxima vez que ese subproceso intentó usar un TS lo destruyó. Y seguiría bombardeando hasta que la aplicación se reciclara. End está ahí para las migraciones de ASP clásico a asp.net, pero no es algo que deberías estar usando. Es lamentable que MS tomó hasta .Net 4 para realmente documentar esto y agregar Response.CompleteRequest. – Andy

+0

Ver: http://msdn.microsoft.com/en-us/library/a8wa7sdt.aspx y http://msdn.microsoft.com/en-us/library/system.web.httpresponse.end.aspx – Andy

4

Response.Redirect le permite llamar a Response.End.

Response.Redirect(url, true); 
2

No es necesario llamar a Response.End, de hecho, si usted piensa que usted necesita para poner fin a la respuesta de utilizar la sobrecarga de Response.Redirect (url, endResponse)

Cuestiones relacionadas