如何响应。在IIS7.5上写?

时间:2012-07-17 15:59:28

标签: asp.net iis-7.5

我正在尝试写出对客户的回复:

response.StatusCode = (int)HttpStatusCode.BadRequest;
response.ClearContent();
response.Write(String.Format(
      "<!doctype html>"+CRLF+
      "<html>" + CRLF +
      "<head><title>{0}</title></head>" + CRLF +
      "<body><h1>{0}</h1>"+CRLF+
      "{1}"+CRLF+
      "</body>" + CRLF +
      "</html>", 
      response.Status, "The grob must be in the frobber."));
response.Flush();
response.End();

在localhost上运行时代码运行正常(Visual Studio(2010(Windows 7(专业版(64位)))))开发Cassini Web服务器:

HTTP/1.1 400 Bad Request
Server: ASP.NET Development Server/10.0.0.0
Date: Tue, 17 Jul 2012 15:56:42 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: private
Content-Type: text/html
Connection: Close

<!doctype html>
<html>
<head><title>400 Bad Request</title></head>
<body><h1>400 Bad Request</h1>
The grob must be in the frobber.
</body>
</html>

但是当我将网站部署到运行IIS7.5的Windows Server 2008 R2时,相同的代码不起作用:

HTTP/1.1 400 Bad Request
Cache-Control: private
Content-Type: text/html
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 17 Jul 2012 15:57:44 GMT
Content-Length: 11

Bad Request

如何从IIS执行Response.Write

3 个答案:

答案 0 :(得分:5)

默认情况下,如果代码为&gt; = 400,IIS 7将更改响应 http://msdn.microsoft.com/en-us/library/ms690497(v=vs.90).aspx

但您可以在httpErrors的{​​{1}}元素中更改此内容。

system.webServer

编辑:如果你使用它,这将会中断<httpErrors existingResponse="PassThrough" /> 。你可能最好在没有响应的情况下返回400,然后设置web.config以重定向到400个错误的自定义页面。

CustomErrors

答案 1 :(得分:3)

我遇到了这个问题&amp;今天花了几个令人沮丧的时间来扼杀它。在我的情况下,我通过Response.Write将可能非常大的CSV数据直接发送到客户端并每隔3k记录刷新一次。它在我的本地环境中运行良好,但在Windows 2008服务器上部署到IIS 7.5时失败。没有例外,只是客户端的空CSV。

结果我的应用程序启用了动态压缩。它可以直接通过web.config禁用,也可以在IIS MMC界面中禁用。您可以使用浏览器的工具来检查您收到的响应的标头。

Content-Encoding:gzip

禁用动态压缩(不确定最初是如何/为何启用),并且它运行正常。这可能不是你的问题,但它是我的。我在这一天大部分时间都在附近钓鱼,并没有看到它直接回答,所以我想我会把它扔出去。此外,结果集的大小无关紧要;一个5kb的文件和3Gb文件也有同样的问题。

答案 2 :(得分:0)

您是否检查过服务器上是否启用了asp.net?您需要使用Windows服务器管理器来检查已安装的功能。

我刚刚在我的服务器上试过你的代码&amp;尽管我假设是围绕response套管的拼写错误,但它按预期工作。