no se puede redirigir después de descargar un archivo

¡Tengo que redirigir a la misma página después de descargar un archivo!

cuando digo response.redirect .. dice No se puede redirigir después de que se hayan enviado los encabezados HTTP

¿Puede alguien ayudarme con esto?

Estoy comprimiendo un archivo usando ionic.zip y descargándolo.

PD: Avíseme si tengo que hacer mi pregunta más clara, puedo explicarlo :(

    Response.Clear();
    Response.BufferOutput = false;
    string filename = "results" + ".zip";
    Response.ContentType = "application/zip";
    Response.AddHeader("content-disposition", "filename=" + filename);

    using (ZipFile zip = new ZipFile())
    {
        zip.AddDirectory(pathhdf.Value);
        zip.Save(Response.OutputStream);
    }

    Response.Close();

   Response.Redirect("Default.aspx"); /// here come my error

Gracias de antemano!

preguntado el 12 de junio de 12 a las 20:06

Parece ser una pregunta similar a esta: stackoverflow.com/questions/10778426/… -

3 Respuestas

No puede enviar un encabezado de redireccionamiento ni ningún otro encabezado HTTP después de enviar contenido HTTP. En este caso, su contenido HTTP es su archivo .zip, por lo que no puede enviar un encabezado de redirección después de escribir el archivo .zip en el flujo de salida.

Respondido el 12 de junio de 12 a las 20:06

No puede redirigir desde el servidor porque no sabe cuánto tardará el cliente en descargar el archivo. Puede usar el intervalo de JavaScript para sondear la presencia de una cookie que el servidor podría emitir. Aquí está un buen artículo explicando esto Una vez que se detecta la cookie, el cliente sabe que la descarga ha finalizado y puede redirigir usando, por ejemplo window.location.href. Y aqui hay un publicación similar.

contestado el 23 de mayo de 17 a las 12:05

No puede hacer una redirección después de enviar un archivo. Solo puede haber una respuesta para una solicitud y la redirección es una respuesta en sí misma.

Si desea realizar tanto la descarga como la redirección, debe enviar dos solicitudes desde el cliente. Inicie la descarga, luego use setTimeout para realizar la redirección a Default.aspx después de un retraso lo suficientemente largo como para saber que la descarga ha comenzado. El servidor solo responderá a una solicitud a la vez, por lo que la página Default.aspx se cargará después de que se complete la descarga.

Respondido el 12 de junio de 12 a las 20:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.