2

ボタン付きの ASP Web フォーム ページがあります。ポストバック時に、ボタンは一部の XML コンテンツをファイルとしてユーザーに送り返します。これは機能していますが、長さが 16759 の文字列の場合、ダウンロードされたファイルが 10 バイト短くなりました。Chrome と Firefox の両方で同じ動作が見られました。

解決策は、コンテンツ タイプを「text/xml」(「text/plain」も試しました) から「application/octet-stream」に変更することでした。ただし、他のコンテンツ タイプがこのように動作する理由を理解したいと思います。

私のコードは次のとおりです。(私はいくつかの異なる方法で遊んでみましたが、何も変わりませんでした)

HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "text/plain";
HttpContext.Current.Response.AddHeader("Content-Length", content.Length.ToString());
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"test.txt\"");
HttpContext.Current.Response.Write(content);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.Close();
4

1 に答える 1

3

必要なのは、ストリームでCloseを呼び出すことだけではありません。説明を求めないでください。私が知っているのは、それが機能することだけです。

Ray Cheng から提供された HttpResponse.Closeの MSDN リンクによる説明:

このメソッドは、クライアントへの接続を突然終了するものであり、通常の HTTP 要求処理用ではありません。このメソッドはリセット パケットをクライアントに送信します。これにより、サーバー、クライアント、またはその間のどこかにバッファリングされた応答データがドロップされる可能性があります。

于 2012-06-21T06:41:46.750 に答える