Cambiar el nombre en el encabezado de un controlador de recursos en C #
-
05-07-2019 - |
Pregunta
Tengo un controlador de recursos que es Response.WriteFile (fileName) basado en un parámetro pasado a través de la cadena de consulta. Estoy manejando el mimetype correctamente, pero el problema está en algunos navegadores, el nombre del archivo aparece como Res.ashx (el nombre del controlador) en lugar de MyPdf.pdf (el archivo que estoy publicando). ¿Alguien puede informarme cómo cambiar el nombre del archivo cuando se envía de vuelta al servidor? Aquí está mi código:
// Get the name of the application
string application = context.Request.QueryString["a"];
string resource = context.Request.QueryString["r"];
// Parse the file extension
string[] extensionArray = resource.Split(".".ToCharArray());
// Set the content type
if (extensionArray.Length > 0)
context.Response.ContentType = MimeHandler.GetContentType(
extensionArray[extensionArray.Length - 1].ToLower());
// clean the information
application = (string.IsNullOrEmpty(application)) ?
"../App_Data/" : application.Replace("..", "");
// clean the resource
resource = (string.IsNullOrEmpty(resource)) ?
"" : resource.Replace("..", "");
string url = "./App_Data/" + application + "/" + resource;
context.Response.WriteFile(url);
Solución
Extendiéndose del comentario de Joel, su código real se vería así:
context.Response.AddHeader("content-disposition", "attachment; filename=" + resource);
Otros consejos
Esta publicación de Scott Hanselman debería ser útil:
http://www.hanselman.com/blog/CommentView.aspx?guid= 360
Gracias chicos por su respuesta. El código final funciona y verifica el pdf.
if (extensionArray[extensionArray.Length - 1].ToLower() == "pdf")
context.Response.AddHeader("content-disposition",
"Attachment; filename=" + resource);