【问题标题】:Why is Request not available for my PDF request?为什么请求不适用于我的 PDF 请求?
【发布时间】:2010-06-11 16:50:09
【问题描述】:

我们正在尝试创建一个包含 PDF 的 .NET aspx 页面。通过硬编码做到这一点很容易。

<object height="1250px" width="100%" type="application/pdf" data="our.pdf">
    <param value="our.pdf" name="src" />
    <param value="transparent" name="wmode" />
</object>

(不要太担心透明的事情......我们这样做是出于其他原因......但我将其包括在此处“以防万一”。)

问题是当我们想要动态生成 PDF 时。我们在前端填充文字的代码如下所示:

ltrPDF.Text = String.Format("<object height=\"1250px\" width=\"100%\" type=\"application/pdf\" data=\"ourPdfGenerator.aspx?var0={0}&var1={1}&var2={2}\">", var0, var1, var2);
ltrPDF.Text += String.Format("<param value=\"ourPdfGenerator.aspx?var0={0}&var1={1}&var2={2}\">", var0, var1, var2);
ltrPDF.Text += "<param value=\"transparent\" name=\"wmode\"/>";
ltrPDF.Text += "</object>";

有点难看,但它似乎应该可以工作。但事实并非如此。

当我调试时,在 ourPdfGenerator.aspx.cs Page_Load 方法的第一行设置一个断点,我很容易到达断点。但是,我们做的第一件事是尝试使用 Request.QueryString:

string var0 = Request.QueryString["var0"];

立即抛出 HttpException:“请求在此上下文中不可用。”我不清楚:

  • 为什么不可用?
  • 我该怎么办?

编辑:(顺便说一句,我知道从 aspx 页面请求 mime 类型的 pdf 似乎有点奇怪......但我们之前使用过 aspx 页面来生成 cs 页面......我们做这样的事情:

Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment;filename=\"our.pdf\"");
using (MemoryStream pdfStream = new MemoryStream())
{
    ourSpecialPdfGenerator.ExportToPdf(pdfStream);
    Response.BinaryWrite(pdfStream.ToArray());
}
Response.End();

这在其他情况下一直运行良好一段时间......但始终作为其自己的页面。我们现在不同的是,我们不是直接调用这个页面,而是尝试嵌入它,所以它是从&lt;object&gt;标签调用的,这显然会导致问题......

【问题讨论】:

    标签: c# asp.net httprequest


    【解决方案1】:

    错误在ourPdfGenerator.aspx.cs。你的object 标签很好。可以把代码发到ourPdfGenerator.aspx.cs吗?

    【讨论】:

    • 好吧,我想你可能是对的......我可能做了一些愚蠢的事情......等等。
    • 就是这样。我太沉迷于奇怪的理论,无法检查显而易见的事情。我在页面的构造函数中有我的 Request.QueryString 东西,而不是 Page_Load。 (哦!)我被这些奇怪的东西分心了,以至于我没有寻找明显的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 2018-06-19
    • 2020-09-28
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    相关资源
    最近更新 更多