Anforderung:

ein PDF-Dokument soll direkt zum Download angeboten werden ohne es anzuzeigen

 

Lösung in aspx:

Ausgabe der Datei als Binary; dadurch zeigt der Browser automatisch das Fenster "speichern unter" an da er den Dateitype nicht kennt.

Beispiel:
string sFile = "abc.pdf";
string sPathAndFile = @"c:\" + sFile;
FileStream MyFileStream = new FileStream(sPathAndFile, FileMode.Open);
long FileSize;
FileSize = MyFileStream.Length;
byte[] Buffer = new byte[(int)FileSize];
MyFileStream.Read(Buffer, 0, (int)MyFileStream.Length);
MyFileStream.Close();
Response.ClearContent();
Response.ContentType = "application/octet-stream";
Response.AddHeader("content-disposition", @"attachment; filename=" + sFile);
Response.BinaryWrite(Buffer);
Response.End();

 

Die beschriebene Lösung ist soweit OK, scheint aber mit FireFox 33 nicht mehr zu funktionieren.
Das Problem scheint dabei die Funktion BinaryWrite zu sein. Im Zuge einer Lösungsfindung scheint mir nun folgendes Vorgehen geeigneter:

Response.ClearContent();
Response.ClearHeaders();           
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + Subject + ".pdf");
System.IO.FileInfo oFile = new System.IO.FileInfo(sPathAndFile);
Response.AddHeader("Content-Length", oFile.Length.ToString());
Response.TransmitFile(sPathAndFile);           
try { Response.End(); } catch { }

Der Vorteil liegt hier vor allem bei größeren Dateien, welche direkt an den Client weiter gereicht werden und somit den Server weniger belasten.

Sie hierzu auch: http://dotnetslackers.com/community/blogs/haissam/archive/2007/04/03/Downloading-Files-C_2300_.aspx