尝试使用内存流显示 PDF 时无法评估表达式错误

问题描述

我正在尝试生成我的 SharePoint 页面的 PDF,但一直收到“无法计算表达式,因为代码已优化或本机框架位于调用堆栈顶部。”错误。我会以正确的方式这样做吗?

protected void btnDownload_Click(object sender,EventArgs e)
        {

            try
            {
                SPSite spBtnSite = new SPSite(SPContext.Current.Site.Url);
                SPWeb btnSPWeb = SPContext.Current.Web;
                string doclibURL = string.Empty;
                using (MemoryStream ms = new MemoryStream())
                {
                    using (var pdfWriter = new PdfWriter(ms))
                    {
                        ConverterProperties properties = new ConverterProperties();
                        pdfWriter.SetCloseStream(false);
                        PdfDocument pdfDocument = new PdfDocument(pdfWriter);

                        //For setting the PAGE SIZE
                        pdfDocument.SetDefaultPageSize(iText.Kernel.Geom.PageSize.A4);
                        Document document1 = new Document(pdfDocument,pdfDocument.GetDefaultPageSize(),false);
                        using (var document = HtmlConverter.ConvertTodocument(hidText.Text,pdfDocument,properties))
                        {

                        }
                        ms.Position = 0;
                        byte[] bytesInStream = ms.ToArray(); // simpler way of converting to array
                        ms.Close();

                        if (bytesInStream != null)
                        {
                            Page.Response.Clear();
                            Page.Response.ClearHeaders();
                            Page.Response.ClearContent();
                            Page.Response.ContentType = "application/pdf";
                            Page.response.addheader("content-length",bytesInStream.Length.ToString());
                            Page.Response.BinaryWrite(bytesInStream);
                            Page.Response.End();
                        }
                    }

                }
            }
            catch (Exception ex_btnSubmit_Click)
            {
                Exceptions.SaveException(UserID,ex_btnSubmit_Click.Message,ex_btnSubmit_Click.StackTrace,(ex_btnSubmit_Click.InnerException != null) ? ex_btnSubmit_Click.InnerException.Message : "");
            }
        }

解决方法

您在 ThreadAbortException 获得了 Response.End()。根据 this,您应该使用 HttpContext.Current.ApplicationInstance.CompleteRequest 而不是 Response.End()