1

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

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 (Professional (64-bit)))) 开发 Cassini web-server 上运行时运行良好:

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

我如何Response.Write从 IIS 执行?

4

3 回答 3

5

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

但是你可以在 的httpErrors元素中改变它system.webServer

<httpErrors existingResponse="PassThrough" />

编辑:这将打破CustomErrors,如果你正在使用它。您最好在没有响应的情况下返回 400,然后设置 web.config 以重定向到 400 错误的自定义页面。

<customErrors mode="On">
    <error statusCode="400" redirect="Frobber.htm" />
</customErrors>
于 2012-07-17T16:59:34.553 回答
3

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

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

Content-Encoding:gzip

禁用动态压缩(不确定最初启用它的方式/原因),它工作正常。这可能不是你的问题,但它是我的。我花了一天的大部分时间在这个上钓鱼,并没有看到它直接回答,所以我想我会把它扔在那里。此外,结果集的大小无关紧要。5kb 文件和 3Gb 文件有同样的问题。

于 2012-12-12T06:38:27.007 回答
0

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

我刚刚在我的服务器上尝试了您的代码,尽管我认为它的大小写错误response,但它按预期工作。

于 2012-07-17T16:44:29.977 回答