代码之家  ›  专栏  ›  技术社区  ›  Razor

C写入输出流

  •  0
  • Razor  · 技术社区  · 16 年前

    此代码将始终使我的ASPX页面加载两次。这与autoeventwireup无关。

    Response.Clear();
    Response.ContentType = "application/pdf";
    Response.AppendHeader("Content-Disposition", "inline;filename=data.pdf");
    Response.BufferOutput = true;
    byte[] response = GetDocument(doclocation);
    Response.AddHeader("Content-Length", response.Length.ToString());
    Response.BinaryWrite(response);
    Response.End();
    

    当我硬编码一些虚拟值时,此代码只会使我的页面加载一次(应该如此)。

    Response.Clear();
    Response.ContentType = "application/pdf";
    Response.AppendHeader("Content-Disposition", "inline;filename=data.pdf");
    Response.BufferOutput = true;
    byte[] response = new byte[] {10,11,12,13};
    Response.AddHeader("Content-Length", response.Length.ToString());
    Response.BinaryWrite(response);
    Response.End();
    

    我还增加了web.config文件中良好度量的请求长度。

    <httpRuntime executionTimeout="180" maxRequestLength="400000"/>
    

    什么也没有。有人看到我没有的东西吗?

    4 回复  |  直到 12 年前
        1
  •  0
  •   TheZenker    15 年前

    你找到解决这个问题的办法了吗?我也有同样的问题,我的代码几乎是你的镜子。主要区别是我的PDF托管在一个iframe中。

    我发现了一些有趣的线索: 如果我对word.doc进行流式处理,它只加载一次,如果PDF加载两次。此外,我还看到了不同客户端桌面的不同行为。我认为Adobe版本可能与此有关。

    更新:

    在我的例子中,我将httpcacheability设置为nocache。在验证这一点时,任何非客户机缓存选项都会导致双重下载PDF。只有完全不设置它(默认为private)或显式地将其设置为private或public才能解决此问题,所有其他设置都复制了文档的双重加载。

        2
  •  1
  •   Codingday    16 年前
    GetDocument(doclocation);
    

    这个方法是否会以某种方式返回重定向代码?或者可能是动态内容的iframe或img?

    如果是这样:

    通常,由于URL响应,控件可能会被调用两次。首先,它呈现内容。之后,您的浏览器尝试下载标签(iframe,img)源代码,它实际上是生成的动态内容。所以它向Web服务器发出了另一个请求。在这种情况下,创建的另一个页面对象具有不同的视图状态,因为它是一个不同的请求。

        3
  •  0
  •   seanosteen    16 年前

    快速猜测:在页面生命周期的这个阶段,包含getdocument()的类是否已经经历了垃圾收集?然后,ASP.NET工作进程需要重新加载页面才能再次读取该方法?

        4
  •  0
  •   Greg B    16 年前

    你在页面加载中试过吗?为什么getdocument是静态方法?