从ASP .Net Web API导出到HTML中的Excel

问题描述:

我在我的HTML页面中导出到Excel按钮,onClick按钮我将发送GET请求到ASP .Net Web API,它从数据库获取数据并返回HTTPContext二进制响应。在前端,我正在获取Excel文件的二进制数据。如何一旦回应来直接下载文件?从ASP .Net Web API导出到HTML中的Excel

  HttpContext.Current.Response.ClearContent(); 
      FileStream objFileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); 
      byte[] excelResponse = new byte[objFileStream.Length]; 
      objFileStream.Read(excelResponse, 0, excelResponse.Length); 
      HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
      HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", fileName)); 
      HttpContext.Current.Response.BinaryWrite(excelResponse); 

我的前端二进制内容

PKS��J�ɉ�fxl/workbook.xml �(��P�N�0����SA5������8�����4�Z^���8�I�n"�+�Y�����|}����ጉ�V,����V�����v��OJ�=� 

如何下载为文件?我不想使用表格

下面是我点击导出按钮的AJAX调用。

// Make AJAX call 
    $.ajax({ 
     type: "GET", 
     url: "http://localhost:8899/api/ExportDataToExcel/", 
     data: oData, 
     headers: { 
      "Authorization": "Bearer " + sToken, 
     }, 
     success: function (oResult) { 
      onSuccess(oResult); 
     }, 
     error: function (oResponse) { 
      onFailure(oResponse); 
     } 
    }); 

这就是我正在做的导出到Excel按钮点击。

如果我使用表单提交,那么我得到授权拒绝错误,因为API期望持票人令牌。下面的代码提供授权禁止错误

 var form = document.createElement("form") 
     form.action = url + 'exportDataToExcel/'; 
     form.method = "GET"; 
     document.body.appendChild(form); 
     form.submit(true); 
     document.body.removeChild(form); 
+0

前端的代码是什么?有相当多的问题提出相同的问题。 例如: https://*.com/questions/28165424/download-file-via-jquery-ajax-post – ACOMIT001

+0

可能的重复[通过jquery ajax post下载文件](https://*.com/问题/ 28165424/download-file-via-jquery-ajax-post) – ACOMIT001

+0

所有的帖子都用FORM和FORM提交说明..如果我使用表单提交并调用相同的GET方法,那么它正在工作。但是为什么我应该使用FORM? – Nanju

我通过使用XMLHttpRequest替代AJAX解决了这个问题,因为AJAX不能接收二进制缓冲区响应。一旦我收到XHR响应,我创建JavaScript Blob,然后锚定标签并将该锚定元素重定向到BlobObjectURL。