我在Visual Studio 2015中使用C#和EXT.NET开发了一个Web应用程序,并实现了一种使用HTTP响应下载文件的方法。用户单击网格中某行上的下载按钮,然后下载该文件。当我在计算机上本地运行应用程序时,这非常正常。一旦我在位于 Windows 2012 Server 上的 IIS网络服务器(v8.0)上发布并安装该应用程序,它就不再起作用了。每次单击下载按钮时,都会显示一个弹出窗口,其中包含以下消息:
请求失败
状态代码:
状态文字:* BADRESPONSE:意外的令牌<
在codebehind方法中,我使用响应来写文件
// Clear the content of the response
Response.ClearContent();
Response.ClearHeaders();
// LINE1: Add the file name and attachment, which will force the open/cance/save dialog to show, to the header
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name);
// Add the file size into the response header
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
// Set the ContentType
Response.ContentType = "image/jpeg";
//Response.Redirect(url, true);
// Write the file into the response (TransmitFile is for ASP.NET 2.0. In ASP.NET 1.1 you have to use WriteFile instead)
Response.TransmitFile(fileInfo.FullName);
HttpContext.Current.Response.Flush(); // Sends all currently buffered output to the client.
HttpContext.Current.Response.SuppressContent = true; // Gets or sets a value indicating whether to send HTTP content to the client.
HttpContext.Current.ApplicationInstance.CompleteRequest(); // Causes ASP.NET to bypass all events and filtering in the HTTP pipeline chain of execution and directly execute the EndRequest event.
IIS服务器设置为在IIS应用程序池中使用集成管道模式,当将其转换为Classic时,下载再次有效。
但是,我真的想让它使用集成设置,所以我在Visual Studio中更改我的Project以使用集成管理Pipleline模式并更改代码以新方式添加标题。
经典流水线模式
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
集成管道模式
Response.Headers.Add("Content-Length", fileInfo.Length.ToString());
但问题是重新启动
我发现HTTP响应标头永远不会在已发布的应用程序中设置,但它与本地应用程序一样。
通过Visual Studio在本地运行应用程序时,我得到以下HTTP响应:
运行已发布的IIS应用程序:
任何人对于为什么会这样做有任何想法?
由于