ABCpdf - 使用 .NET Core 2.1 下载 PDF - HttpContext/HttpResponse

ABCpdf - Download PDF with .NET Core 2.1 - HttpContext/HttpResponse

我正在创建一个网页,允许用户使用 ABCpdf 下载 PDF 格式的报告。但是阅读文档,我看到的唯一选项是使用 doc.Save("test.pdf") (将文件保存在托管应用程序的服务器上)或使用 'HttpContext.Current.ApplicationInstance.CompleteRequest();' (保存在客户端,这就是我想要,但是 HttpContext.Current 在 .NET Core 上不可用。

我的创可贴解决方案是 doc.Save(),我会将文件保存在服务器上,然后将 link 发送到视图,然后视图从服务器下载它。我能想到的一个潜在风险是确保在服务器上开始下载后'clean up'。

是否有 HttpContext.Current 和 HttpResponse 的替代/.NET Core 等价物?

这是我想要使用的代码:

byte[] theData = doc.GetData();
Response.ClearHeaders();
Response.ClearContent();
Response.Expires = -1000;
Response.ContentType = "application/pdf";
Response.AddHeader("content-length", theData.Length.ToString());
Response.AddHeader("content-disposition", "attachment; filename=test.pdf"); 
Response.BinaryWrite(theData);
HttpContext.Current.ApplicationInstance.CompleteRequest();

我得到的错误(非详细)

'HttpResponse' does not contain a definition for 'ClearHeaders'
'HttpResponse' does not contain a definition for 'ClearContent'
'HttpResponse' does not contain a definition for 'Expires'
'HttpResponse' does not contain a definition for 'AddHeader'
'HttpResponse' does not contain a definition for 'BinaryWrite'
'HttpContext' does not contain a definition for 'Current'

我已将此答案更新为实际有效的内容! GetStream 可以满足您的需求,但是为了便于在 .NET Core 中下载文件,如果您按照 https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-2.1 中的描述创建控制器会容易得多。 然后你可以创建一个路由控制器来为流中的文件提供服务,如 所示。 所以你的控制器看起来像:

[Route("api/[controller]")]
public class PDFController : Controller {
// GET: api/<controller>
    [HttpGet]
    public IActionResult Get() {
        using (Doc theDoc = new Doc()) {
            theDoc.FontSize = 96;
            theDoc.AddText("Hello World");
            Response.Headers.Clear();
            Response.Headers.Add("content-disposition", "attachment; filename=test.pdf");
            return new FileStreamResult(theDoc.GetStream(), "application/pdf");
        }
    }
}

出于好奇,我只是对此进行了模拟,它确实有效 - 当您转到 URL localhost:port/api/pdf[ 时,将 PDF 直接提供给浏览器作为下载=23=]。如果您进行内容配置 "inline; filename=test.pdf",它将显示在浏览器中并可下载为 test.pdf。

此处有关 GetStream 方法的更多信息:https://www.websupergoo.com/helppdfnet/default.htm?page=source%2F5-abcpdf%2Fdoc%2F1-methods%2Fgetstream.htm