【问题标题】:How to Response.Write on IIS7.5?如何在 IIS7.5 上进行 Response.Write?
【发布时间】:2012-07-17 15:59:28
【问题描述】:

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

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

如何从 IIS 执行Response.Write

【问题讨论】:

    标签: asp.net iis-7.5


    【解决方案1】:

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

    但您可以在system.webServerhttpErrors 元素中更改此设置。

    <httpErrors existingResponse="PassThrough" />
    

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

    <customErrors mode="On">
        <error statusCode="400" redirect="Frobber.htm" />
    </customErrors>
    

    【讨论】:

    • 我希望错误请求的响应代码是400,即我宁愿不将客户端引导到代码为200``. If the receive 200 OK`的页面,他们可能认为一切正常好的。
    • 谢谢你:
    【解决方案2】:

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

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

    Content-Encoding:gzip
    

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 这应该是评论,而不是答案。
      • 我会说 Page_Init 可能太早了,但如果我将代码移到那里它仍然有效。
      猜你喜欢
      • 2011-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 2011-07-05
      • 2011-11-16
      • 1970-01-01
      相关资源
      最近更新 更多