服务器在HTTP头已发送后无法设置内容类型。

11

我在下面的代码中遇到了错误(“服务器无法在发送HTTP标头后设置内容类型。”)。ContentType这一行代码应该怎么改?

System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.ContentType = "text/plain";
response.AddHeader("Content-Disposition", "attachment; filename=" + System.IO.Path.GetFileName(PervasiveConstants.DownloadZipLocation) + ";");
response.TransmitFile(PervasiveConstants.DownloadZipLocation);
response.Flush();
response.End();  

这是 Sharepoint 2010 网页部件内的内容。


1
这是所有服务器的通用“问题”。一旦程序开始生成内容,头文件应该被发送到客户端并且不能更改。 为了在程序中的任何位置设置头文件,您需要启用输出缓冲或类似的东西。在Apache/php中称为“输出缓冲”,但其他服务器中也应该有类似的功能。 - kirilloid
1
为什么要从 ClearContent 开始?如果响应已经有内容了,那么你的代码可能运行得太晚了。 - Damien_The_Unbeliever
7个回答

7
尝试设置response.BufferOutput = true;。在设置response变量后立即执行此操作。

2
我使用了以下代码:System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; response.BufferOutput = true;但是我仍然得到相同的错误。 - user3328730

3

2

我在一个网页表单上遇到了非常类似的问题。我通过在代码后台为按钮添加以下代码来解决此问题:

ScriptManager.GetCurrent(this).RegisterPostBackControl(btnPrint);

1
你需要设置内容类型吗?不要忽视这个解决方案,因为你可能会发现你的代码在发送响应类型时可以完美运行而无需显式定义内容类型。因此删除以下行应该可以消除错误,并且很可能不会引入新问题(当然,你需要根据你的情况进行测试):

0

请确保控制器或操作中应用的任何过滤器都没有错误,这可能会导致在实际请求之前写入响应重定向或响应头。


0

这个解决方案对我有用,将以下代码行添加到方法的开头即可:

Server.ClearError();

-2

我曾经遇到过同样的问题,以下解决方案可以解决这个问题, 在运行response.AddHeader(之前运行response.ClearHeaders();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接