客户端使用Response.BinaryWriteASP.NETc#下载pdf文件

Client download pdf file using Response.BinaryWrite ASP.NET c#

我正在尝试添加下载 pdf 文件的功能。我正在使用 ironpdf 生成 pdf 文件,我希望用户点击并下载它。

这是我的经纪人。

try
        {
            // Render any HTML fragment or document to HTML
            var Renderer = new IronPdf.HtmlToPdf();
            var PDF = Renderer.RenderHtmlAsPdf("<h1>Hello IronPdf</h1>");
            var data = PDF.MetaData;
            context.Response.Clear();
            context.Response.ClearHeaders();
            context.Response.Buffer = true;
            context.Response.ContentType = "application/pdf";
            context.Response.AddHeader("content-disposition", "attachment;filename=Cotacao.pdf");
            context.Response.BinaryWrite(PDF.BinaryData);
            context.Response.Flush();
        }
        catch (Exception e)
        {

        }
        finally
        {
            context.ApplicationInstance.CompleteRequest();
        }

这是我的ajax请求

function GeneratePDF() {
return $.ajax({
    type: "POST",
    url: "../Handlers/GeneratePDF.ashx",
    success: PDFSuccess,
    error: PDFError
});

我可以在浏览器中看到输出流响应,但没有下载对话框。我做错了什么?

提前致谢。

我遇到了同样的问题,并且能够让它与前端的 FileDownload 一起工作:

const FileDownload = require('js-file-download');

postHtmlString(data).then(response => {
   console.log(response)
   commit('pdfDownloading', false)
   FileDownload(response.data, 'example.pdf');
})...

还有我的控制器returns:

return File(pdf.BinaryData, "application/pdf");

这里是 js 文件下载:https://www.npmjs.com/package/js-file-download

最后,也许最重要的是,您需要在前端的 api 请求中设置响应类型:

 responseType: 'arraybuffer'