ASP.使用自定义textwwriter时,带有自定义actionresult: outputStream的.NET M
本文关键字:自定义 actionresult outputStream NET textwwriter ASP | 更新日期: 2023-09-27 18:09:58
我想生成一个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.
我读过其他建议使用自定义actionresult的帖子,所以我做了,没有成功。
怎么了?
我看不出在这种情况下创建自定义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");
}