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 サーバーで実行すると、コードは正常に動作します。

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 に Web サイトを展開すると、同じコードが機能しません。

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.WriteIIS から実行するにはどうすればよいですか?

4

3 に答える 3

5

デフォルトでは、コードが >= 400 http://msdn.microsoft.com/en-us/library/ms690497(v=vs.90).aspxの場合、IIS 7 は応答を変更します。

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

私はこの正確な問題に遭遇し、今日、イライラする数時間を過ごしました. 私の場合、潜在的に非常に大きな CSV データを Response.Write を介してクライアントに直接送信し、3k レコードごとにフラッシュしています。私のローカル環境では問題なく動作しますが、Windows 2008 サーバー上の IIS 7.5 に展開すると失敗しました。例外はありません。クライアントの空の CSV だけです。

アプリケーションで動的圧縮が有効になっていることがわかりました。web.config を介して直接、または IIS MMC インターフェイスで無効にすることができます。これは、ブラウザーのツールを使用して受信した応答のヘッダーを調べることで検証できます。

Content-Encoding:gzip

動的圧縮を無効にすると(最初に有効にした方法/理由がわからない)、正常に機能しました。それはあなたの問題ではないかもしれませんが、それは私のものでした。私はこの 1 つで 1 日の大半を釣り回っていましたが、直接回答が得られなかったので、そこに放り投げることにしました。また、結果セットのサイズは問題ではありませんでした。5kb ファイルと 3Gb ファイルにも同じ問題がありました。

于 2012-12-12T06:38:27.007 に答える
0

サーバーでasp.netが有効になっていることを確認しましたか? 機能がインストールされていることを確認するには、Windows サーバー マネージャーを使用する必要があります。

サーバーであなたのコードを試してみましたが、 のケーシングに関するタイプミスだと思いますが、response期待どおりに機能しました。

于 2012-07-17T16:44:29.977 に答える