Response.end 不起作用

本文关键字:不起作用 end Response | 更新日期: 2023-09-27 18:33:34

我尝试使用Response.End()和OpenXml下载.xlsx文档。但什么也没发生。它被困在Response.End()

public void DownloadStudents(int InstituteId, int DepartmentId)
{ 
     var memoryStream = new MemoryStream();
     using (var spreadsheetDocument = SpreadsheetDocument.Create(memoryStream, SpreadsheetDocumentType.Workbook))
     {
         //Some code
         foreach (var line in users)
         {
              // Fill
         }
         spreadsheetDocument.WorkbookPart.Workbook.Save(); 
    } 
    var excelName = "Title.xlsx";
    Response.Clear();
    Response.CacheControl = "Private"; 
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AddHeader("Content-Type", "application/octet-stream");
    Response.AppendHeader("content-disposition",string.Format("attachment; filename={0}; size={1}", excelName, memoryStream.Length));
    Response.BinaryWrite(memoryStream.ToArray());
    **//Problem is here.**  
    Response.End(); // In this line nothing happens
}

当我尝试使用Response.Flush()时会出现同样的问题。如果我使用CompleteRequest()而不是Response.End() .xlsx文件为空

Response.end 不起作用

这适用于所有文件:

    public static void outputFile(FileContentResult file, String contentDisposition)
    {
        var context = System.Web.HttpContext.Current;
        file.FileDownloadName = contentDisposition;
        context.Response.Clear();
        context.Response.ClearContent();
        context.Response.ClearHeaders();
        context.Response.AppendHeader("content-disposition", contentDisposition);
        context.Response.ContentEncoding = System.Text.Encoding.UTF8;
        context.Response.ContentType = file.ContentType;
        context.Response.AppendHeader("content-length", file.FileContents.Length.ToString());
        context.Response.BinaryWrite(buffer: file.FileContents.ToArray());
        context.Response.Flush();
        context.ApplicationInstance.CompleteRequest();
    }

FileContentResult 是在 MVC 中使用控制器类的 File 方法的结果。

我也相信您缺少的是尝试输出之前关闭工作簿。

我建议在尝试将其输出到视图之前,将 spreadsheetDocument.Close() 后跟 memoryStream.Flush() 添加到您的代码中。

contentDisposition只是String.Format("attachment;filename={0}",fileName)。

此外,Response.End() 会抛出一个错误,因此请始终使用另一个错误。