I have the following code that returns a PDF file in my web application:
string path = "help.pdf"; byte data = File.ReadAllBytes(path); Response.Clear(); Response.ClearHeaders(); Response.AddHeader("Content-Length", data.Length.ToString()); Response.AddHeader("Content-Type", "application/pdf"); Response.AddHeader("Content-Disposition", "attachment; filename=help.pdf"); Response.OutputStream.Write(data, 0, data.Length); Response.End();
When I call the handler of this code in any browser (Chrome, IE or Firefox), I get a "Save as..." dialog with the name of the page (
index.aspx) rather than the name provided in the code (
I checked the HTTP response header with all browsers. It looks like this:
Cache-Control:private Content-Disposition:attachment Content-Length:89407 Content-Type:application/pdf Date:Thu, 07 May 2015 08:43:12 GMT Server:Microsoft-IIS/7.5 X-Powered-By:ASP.NET X-UA-Compatible:IE=edge,chrome=1
As you can see the filename parameter is removed from the Content-Disposition field. So the behaviour of the browser is correct. The web server (IIS) seems to tinker around with the header.
I found somebody with the same problem here. But the problem was never solved. Any ideas?
Note: Modifiyng the code is not a solution. We have third party controls (Telerik RadGrid) on the site that have the same problem with their "Export to PDF" feature.