我试图在WebNetCore6.0中生成活动报告(v16)。对于这两种类型,浏览器中的结果总是“失败”。我做错什么了?
[HttpGet("GetExcelReport")]
public async Task<ActionResult> GetExcelReportAsync(string type)
{
var stream = GenerateDoc(type, Response);
await stream.CopyToAsync(Response.Body);
return new OkResult();
}
internal System.IO.Stream GenerateDoc(string type, HttpResponse response)
{
using (var reportStream =
System.Reflection.Assembly.GetEntryAssembly().GetManifestResourceStream("App.Reports.Reports.PageReport1.rdlx"
))
using (var reader = new System.IO.StreamReader(reportStream))
{
var rpt = new GrapeCity.ActiveReports.PageReport(reader);
IRenderingExtension ri = null;
if (type == "pdf")
{
ri = new GrapeCity.ActiveReports.Export.Pdf.Page.PdfRenderingExtension();
Response.ContentType = "application/pdf";
Response.Headers.Add("content-disposition", $"attachment; filename=sdfgsdfg-sdfgsdf.pdf");
}
else
{
ri = new GrapeCity.ActiveReports.Export.Excel.Page.ExcelRenderingExtension();
Response.ContentType = "application/vnd.ms-excel";
Response.Headers.Add("content-disposition", $"attachment; filename=sdfgsdfg-sdfgsdf.xls");
}
var output = new GrapeCity.ActiveReports.Rendering.IO.MemoryStreamProvider();
rpt.Document.Render(ri, output);
return output.GetPrimaryStream().OpenStream();
}
}

发布于 2022-10-06 05:42:46
假设您的该部件工具工作良好,您可以成功地获得流。
您可以检查Microsoft.AspNetCore.Mvc.ControllerBase类,并且可以找到返回FileResult的所有方法:

对于您的需求,您可以尝试以下方法
public virtual FileStreamResult File(Stream fileStream, string contentType, string? fileDownloadName)我试过了,结果:

发布于 2022-10-06 07:22:50
我改变了返回文件的方式。
[HttpGet("GetExcelReport")]
public IActionResult GetExcelReportAsync()
{
Assembly assembly = System.Reflection.Assembly.GetEntryAssembly() ?? throw new ArgumentNullException(nameof(System.Reflection.Assembly));
using (var reportStream = assembly.GetManifestResourceStream("BFW.Reports.Reports.PageReport1.rdlx"))
if (reportStream != null)
{
using (var reader = new System.IO.StreamReader(reportStream))
{
var rpt = new GrapeCity.ActiveReports.PageReport(reader);
IRenderingExtension? re = null;
re = new GrapeCity.ActiveReports.Export.Excel.Page.ExcelRenderingExtension();
var output = new GrapeCity.ActiveReports.Rendering.IO.MemoryStreamProvider();
rpt.Document.Render(re, output);
return File(output.GetPrimaryStream().OpenStream(), "application/octet-stream", "excelfile.xlsx");
}
}
return NotFound();
}https://stackoverflow.com/questions/73961277
复制相似问题