1

ユーザーがリモートで保存された PDF ファイルを取得できるようにする単純な HTTP ハンドラーがあります。驚いたことに、IE9 からハンドラーが呼び出された場合、このコードはうまく機能しますが、IE8 はスタックしたままです。PDFを正しく表示するには、URLをもう一度呼び出す必要があります。

応答にさらに関係があるかどうかを確認するために、Web で確認しました。最初は応答が適切に終了されていないと思っていましたが、次の記事を見つけました 。 -customer-feedback-helps-us-improve-msdn-documentation.aspx どうやら、context.Response.Close() または context.Response.End() を使用しないでください。

私が使用しているコード:

using System.Web;

namespace WebFront.Documents
{
    public class PDFDownloader : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            // Makes sure the page does not get cached
            context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

            // Retrieves the PDF
            byte[] PDFContent = BL.PDFGenerator.GetPDF(context.Request.QueryString["DocNumber"]);

            // Send it back to the client
            context.Response.ContentType = "application/pdf";
            context.Response.BinaryWrite(PDFContent);
            context.Response.Flush();
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

誰かが同じタイプの問題に直面しましたか?

4

2 に答える 2

2

コンテンツ タイプを設定する前にヘッダーをクリアすると、うまくいきました。

public void ProcessRequest(HttpContext context)
{
    // Makes sure the page does not get cached
    context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

    // Retrieves the PDF
    byte[] PDFContent = BL.PDFGenerator.GetPDF(context.Request.QueryString["DocNumber"]);

    // Send it back to the client
    context.Response.ClearHeaders();
    context.Response.ContentType = "application/pdf";
    context.Response.BinaryWrite(PDFContent);
    context.Response.Flush();
    context.Response.End();
}

とにかく、私を正しい軌道に乗せてくれた@nunespascalに感謝します。

于 2012-09-05T14:42:34.810 に答える
0

を呼び出しますResponse.End

これで応答が終了し、すべてのコンテンツが受信されたことをブラウザに通知します。

public void ProcessRequest(HttpContext context)
        {
            // Makes sure the page does not get cached
            context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

            // Retrieves the PDF
            byte[] PDFContent = BL.PDFGenerator.GetPDF(context.Request.QueryString["DocNumber"]);

            // Send it back to the client
            context.Response.ContentType = "application/pdf";
            context.Response.BinaryWrite(PDFContent);
            context.Response.Flush();
            context.Response.End();
        }
于 2012-09-03T18:24:52.753 に答える