繁体   English   中英

具有自定义actionresult的ASP.NET MVC:使用自定义TextWriter时outputStream不可用

[英]ASP.NET MVC with custom actionresult: outputStream is not available when a custom TextWriter is used

我想生成一个PDF,并且在控制器中使用以下代码对其进行调用:

public PdfActionResult Index()
{
   return new PdfActionResult("");
}

自定义操作结果“ pdfActionResult”如下所示:

 public override void ExecuteResult(ControllerContext context)
        {
            var _pdfConverter = new PdfConverter { MediaType = "Print" };
            var response = context.HttpContext.Response;
            response.Clear();
            response.AddHeader("Content-Type", "application/pdf");
            response.AddHeader("Content-Disposition", String.Format("{0}; filename={1}.pdf;", true ? "attachment" : "inline", "bla"));
            var z = context.HttpContext.Request.Url.AbsoluteUri;
            z = z.Substring(0, z.IndexOf("?", System.StringComparison.Ordinal));
            var b = _pdfConverter.GetPdfBytesFromUrl(z);
            response.OutputStream.Write(b,0,b.Length);
            response.Close();
            response.Flush();
            response.End();
        }

我收到以下异常:

System.Web.HttpException: OutputStream is not available when a custom TextWriter is used.

我读过其他建议使用自定义操作结果的SO帖子,所以我这样做了,但没有成功。

怎么了?

在这种情况下,我看不到创建自定义ActionResult的任何理由。 返回PDF数据是一项非常常见的任务,最明智的方法是使用内置的FileResult

同样,您的PdfActionResult在这里混合了两个问题:( 1 )创建PDF数据和( 2 )将其附加到响应。 ActionResult的主要关注点是如何将Action生成的资源交付给客户端,而不是生成资源本身

尝试以下方法:

public FileResult Index()
{
    var _pdfConverter = new PdfConverter { MediaType = "Print" };
    var url = Request.Url.AbsolutePath;
    var pdfBytes = _pdfConverter.GetPdfBytesFromUrl(url);

    return File(pdfBytes, "application/pdf", "bla.pdf");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM