使用IIS集成管道模式时未设置HTTP响应标头

时间:2015-09-15 14:09:00

标签: c# http-headers iis-7.5 httpresponse webclient-download

我在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响应:

  • HTTP / 1.1 200确定
  • Cache-Control:private
  • 内容长度:5885
  • 内容类型:image / jpeg;字符集= UTF-8
  • 服务器:Microsoft-IIS / 10.0
  • X-AspNet-Version:4.0.30319
  • 内容处理:附件; filename = picture.jpg
  • X-SourceFiles:=?UTF-8?B?QzpcVEZTXF ......
  • X-Powered-By:ASP.NET
  • 日期:2015年9月23日星期三15:38:31 GMT

运行已发布的IIS应用程序:

  • HTTP / 1.1 200确定
  • Cache-Control:private
  • Content-Type:text / html;字符集= UTF-8
  • 变化:接受编码
  • 服务器:Microsoft-IIS / 8.0
  • X-AspNet-Version:4.0.30319
  • X-Powered-By:ASP.NET
  • 日期:2015年9月23日星期三15:37:05 GMT
  • 转移编码:chunked

任何人对于为什么会这样做有任何想法?

由于

0 个答案:

没有答案