【问题标题】:Server cannot append header after HTTP headers have been sent when using iTextsharp in mvc在 mvc 中使用 iTextsharp 时,服务器无法在发送 HTTP 标头后附加标头
【发布时间】:2016-08-20 05:14:23
【问题描述】:

在我的 mvc 应用程序中,我在 actionFilter 中使用了以下代码

public void OnActionExecuted(ActionExecutedContext filterContext)
    {
        HttpRequestBase request = filterContext.HttpContext.Request;

        string acceptEncoding = request.Headers["Accept-Encoding"];

        if (!String.IsNullOrEmpty(acceptEncoding))
        {
            acceptEncoding = acceptEncoding.ToUpperInvariant();

            HttpResponseBase response = filterContext.HttpContext.Response;

            if (acceptEncoding.Contains("GZIP"))
            {
                response.AppendHeader("Content-encoding", "gzip");
                response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
            }
            else if (acceptEncoding.Contains("DEFLATE"))
            {
                response.AppendHeader("Content-encoding", "deflate");
                response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
            }
        }
    }

我已经使用 iTextsharp 生成 pdf 文件,我的代码如下

    public ActionResult GenerateSamplePDF()
    {
        //return null;

        try
        {
            Response.Clear();


            string pdfBody = string.Empty;
            pdfBody = "sample text for generating pdf";

            Document document = new Document();
            string fileName = "Sample.pdf";
            var fPath = HttpContext.Server.MapPath("~/BillGeneration/");
            PdfWriter.GetInstance(document, new FileStream(fPath + fileName, FileMode.Create));
            document.Open();

            iTextSharp.text.html.simpleparser.StyleSheet styles = new iTextSharp.text.html.simpleparser.StyleSheet();
            iTextSharp.text.html.simpleparser.HTMLWorker hw = new iTextSharp.text.html.simpleparser.HTMLWorker(document);

            hw.Parse(new StringReader(pdfBody));
            document.Close();


            Response.ClearContent();
            Response.ClearHeaders();
            Response.AddHeader("Content-Disposition", "inline;filename=" + fileName + "");
            Response.ContentType = "application/pdf";
            Response.WriteFile(HttpContext.Server.MapPath("~/BillGeneration/") + fileName);
            Response.Flush();
            Response.Clear();
        }
        catch (Exception ex)
        {
            string exxx = ex.Message;
        }

        return Json(null);

    }

执行时出现异常“发送 HTTP 标头后服务器无法附加标头。”如何重写代码以消除此异常?

【问题讨论】:

    标签: c# asp.net-mvc itextsharp


    【解决方案1】:

    为什么不使用File 方法?

    Response.ClearHeaders();
    Response.AddHeader("Content-Disposition", "inline;filename=" + fileName + "");
    return File(HttpContext.Server.MapPath("~/BillGeneration/") + fileName, "application/pdf");
    

    Response.Flush 立即将输出发送到客户端,因此您无法在之后添加标头。

    【讨论】:

    • 我已经用它来下载到服务器文件夹了。
    猜你喜欢
    • 2012-01-20
    • 2011-09-13
    • 2011-02-21
    • 2023-03-08
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2014-06-10
    相关资源
    最近更新 更多