网络错误失败使用iis

时间:2016-11-24 16:51:34

标签: c# asp.net pdf iis iis-7.5

我继承了一个允许用户下载pdf的.net应用程序。现在,我可以在本地运行时下载pdf文件但是当我部署到IIS服务器时遇到问题。该下载适用于Firefox但不适用于Chrome,有时也适用于IE。我可以在我的本地开发环境中下载它的事实告诉它可能是IIS配置或我的代码。 pdf作为varbinary存储在ms sql server 2012表中。我在下面提供了一些用于读取数据的代码。如果您还需要其他信息,请与我们联系。此外,我检查了iis日志,我得到了200个状态代码。那里什么都没有。

if(Session["DetailID"] != null)
{   
    //get the file
    DataTable dt = sp_Attachment_Download(lblAttachmentIDD.Text);
    DataRow row = dt.Rows[0];

    string name = (string)row["AFileName"];
    string contentType = (string)row["AFileType"];
    Byte[] data = (Byte[])row["AFile"];

    /// Send the file to the browser
    Response.AddHeader("Content-type", contentType);
    Response.AddHeader("Content-Disposition", "attachment; filename=" + name);
    Response.BinaryWrite(data);
    Response.Flush();
    Response.Close();
}

EDITED ---------- 我正在使用IE和Chrome的开发者工具,并发现了一些有趣的东西。当我点击链接时,Chrome会给我以下错误:

interpreted as Document but transferred with MIME type application/pdf:

IE不会出错,但引起了我的注意。我的REQUEST标题,ACCEPT不包含application / pdf,RESPONSE Con​​tent-Type有application / pdf。这可能是什么?如何设置ACCEPT以在aspx页面中包含application / pdf?

2 个答案:

答案 0 :(得分:0)

从chrome下载pdf时我有类似的问题,因为在我的情况下,文件名中有逗号,而且Chrome显然不喜欢它,所以我从文件名中删除了逗号并且它有效。 PS:请尽量不要使用Response.Close()。它中止线程并抛出异常。

Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment; filename=" + fileName.Replace(",",,");
Response.CacheControl = "No-cache";
Response.Write(data);
Response.Flush();
Response.SuppressContent = true;
HttpContext.Current.ApplicationInstance.CompleteRequest();

答案 1 :(得分:0)

也许这会有所帮助,这是我的代码做同样的事情。我注意到的一件事是你没有指定文件长度,我认为这是必需的。请注意,pFileData是包含FileName,一个字符串和FileData的类,一个byte []。

        System.Web.HttpResponse Response = System.Web.HttpContext.Current.Response;
        Response.Clear();
        Response.ClearHeaders();
        Response.ContentType = "application/pdf";
        Response.AddHeader("Content-Disposition", "attachment;filename=" + pFileData.FileName);
        Response.AddHeader("Content-Length", pFileData.FileData.Length.ToString());
        Response.BufferOutput = false;
        Response.BinaryWrite(pFileData.FileData);
        Response.Flush();
        Response.SuppressContent = true;
        HttpContext.Current.ApplicationInstance.CompleteRequest();
        Response.End();