Pregunta

Estoy usando RazorPDF y me gustaría forzar la descarga del PDF en lugar de abrirlo en la pestaña del navegador.¿Cómo hago esto?Gracias

public ActionResult Index()
{
    return View();
}

[HttpPost]
public ActionResult Index(string Id)
{
    return RedirectToAction("Pdf");
}

public PdfResult Pdf()
{
    // With no Model and default view name.  Pdf is always the default view name
    return new PdfResult();
}
¿Fue útil?

Solución

Intente agregar el content-disposition encabezado antes de devolver el PDFResult objeto.

public PdfResult Pdf()
{
  Response.AddHeader("content-disposition", "attachment; filename=YourSanitazedFileName.pdf");

  // With no Model and default view name.  Pdf is always the default view name
  return new PdfResult();
}

Otros consejos

Debes mirar el encabezado "Disposición-disposición";Por ejemplo, la configuración de "Disposición-disposición" a "ADJUNTO; FILENAME= FILENAME.PDF" solicitará al usuario (normalmente) con un cuadro de diálogo "Guardar como: filename.pdf", en lugar de abrirlo.Esto, sin embargo, debe provenir de la solicitud que está haciendo la descarga, por lo que no puede hacer esto durante una redirección.Sin embargo, ASP.NET ofrece respuesta. TRANSMITFILE para este propósito.Por ejemplo (asumiendo que no está usando MVC, que tiene otras opciones preferidas):

Response.Clear();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "attachment; filename=FileName.pdf");
Response.TransmitFile(filePath);
Response.End(); 

Si intenta abrir, entonces el archivo en API convierte el flujo a BYTESARRAY y luego llene el contenido

            HttpResponseMessage result = null;
            result = Request.CreateResponse(HttpStatusCode.OK);
            FileStream stream = File.OpenRead(path);
            byte[] fileBytes = new byte[stream.Length];
            stream.Read(fileBytes, 0, fileBytes.Length);
            stream.Close();           
            result.Content = new ByteArrayContent(fileBytes);
            result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
            result.Content.Headers.ContentDisposition.FileName = "FileName.pdf";            

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