ASP.Net 核心 returns 来自 FileStreamResult 的 500 内部服务器错误
ASP.Net Core returns a 500 INTERNAL SERVER ERROR from a FileStreamResult
ASP.Net Core returns 使用 MemoryStream 写入 PDF 时 FileStreamResult 出现 500 服务器错误
public async Task <Stream> DownloadDocumentInfoAsPdfAsync(User loggedInUser) {
try {
var conversionOptions = new ConversionOptions {
Margins = new MarginSettings(20, 5.5, 10, 5.5),
};
//Creating new MemoryStream from byte[]
return new MemoryStream(_htmlToPdfConverter.ConvertHtml(html, conversionOptions));
}
}
//Returning FileStream from above function.
public async Task <IActionResult> GenerateReport([FromRoute] string info) {
var result = await _mediator.Send(query);
return File(result, "application/pdf", "employee.pdf"); //This will through 500 INTERNAL SERVER ERROR
}
如果您已验证创建的流是有效的,则流的位置很可能没有重置为流的开头。这样做的结果是 FileStreamResult 尝试创建一个流,但从它的结束位置开始并没有找到额外的数据,因此尝试写出一个空白流,这是错误的原因(这不会作为异常抛出)。
要解决此问题,您需要将正在使用的流重置到它的起始位置。 result.Position = 0;行然后在将 MemoryStream 写出到 FileStreamResult 之前重置 MemoryStream。
// Reset the position on the MemoryStream to the beginning in IActionResult() function before returing FileStream
result.Position = 0;
//return File(result,"application/pdf","Employee.pdf")
ASP.Net Core returns 使用 MemoryStream 写入 PDF 时 FileStreamResult 出现 500 服务器错误
public async Task <Stream> DownloadDocumentInfoAsPdfAsync(User loggedInUser) { try { var conversionOptions = new ConversionOptions { Margins = new MarginSettings(20, 5.5, 10, 5.5), }; //Creating new MemoryStream from byte[] return new MemoryStream(_htmlToPdfConverter.ConvertHtml(html, conversionOptions)); } } //Returning FileStream from above function. public async Task <IActionResult> GenerateReport([FromRoute] string info) { var result = await _mediator.Send(query); return File(result, "application/pdf", "employee.pdf"); //This will through 500 INTERNAL SERVER ERROR }
如果您已验证创建的流是有效的,则流的位置很可能没有重置为流的开头。这样做的结果是 FileStreamResult 尝试创建一个流,但从它的结束位置开始并没有找到额外的数据,因此尝试写出一个空白流,这是错误的原因(这不会作为异常抛出)。
要解决此问题,您需要将正在使用的流重置到它的起始位置。 result.Position = 0;行然后在将 MemoryStream 写出到 FileStreamResult 之前重置 MemoryStream。
// Reset the position on the MemoryStream to the beginning in IActionResult() function before returing FileStream result.Position = 0; //return File(result,"application/pdf","Employee.pdf")