ASP.NET Core中Ajax调用返回FileContentResult无文件下载问题求助
问题核心
Ajax请求的响应会被JavaScript引擎接管,而非直接交由浏览器处理文件下载逻辑。只有当浏览器接收到表单提交或页面直接导航返回的文件流时,才会自动触发下载对话框。这就是方法1(表单提交)正常,方法2(Ajax)无反应的原因。
解决方法
方法一:处理Ajax响应,手动触发下载
修改前端Ajax代码,指定响应类型为blob,在成功回调中创建下载链接并触发点击:
var rows = $("#report").jqxGrid('getrows'); var loans = []; for (var i = 0; i < rows.length; i++) { var row = rows[i]; loans.push({ "loanNumber": row.loanNumber, "loanType": row.loanType }); } $.ajax({ data: JSON.stringify(loans), contentType: "application/json", url: "/Reports/ExportLoansReport", type: "POST", xhrFields: { responseType: 'blob' // 关键:声明接收二进制Blob数据 }, success: function(blob) { // 生成临时下载链接 const downloadUrl = window.URL.createObjectURL(blob); const aTag = document.createElement('a'); aTag.href = downloadUrl; aTag.download = "Loans-Export.xlsx"; // 指定文件名 document.body.appendChild(aTag); aTag.click(); // 清理临时资源 window.URL.revokeObjectURL(downloadUrl); document.body.removeChild(aTag); }, error: function() { alert("导出失败,请稍后重试"); } });
方法二:改用动态表单提交(替代Ajax)
如果不想处理Blob数据,可以动态创建表单提交JSON数据,让浏览器自动处理下载:
前端代码
var rows = $("#report").jqxGrid('getrows'); var loans = []; for (var i = 0; i < rows.length; i++) { var row = rows[i]; loans.push({ "loanNumber": row.loanNumber, "loanType": row.loanType }); } // 动态创建表单 const form = document.createElement('form'); form.action = "/Reports/ExportLoansReport"; form.method = "POST"; // 添加隐藏字段存储JSON数据 const input = document.createElement('input'); input.type = 'hidden'; input.name = 'exportData'; input.value = JSON.stringify(loans); form.appendChild(input); document.body.appendChild(form); form.submit(); document.body.removeChild(form);
后端调整参数接收
将原[FromBody]改为[FromForm],接收字符串后反序列化为目标模型:
[HttpPost] public IActionResult ExportLoansReport([FromForm] string exportData) { var model = JsonSerializer.Deserialize<List<LoansReportExportViewModel>>(exportData); // 后续Excel生成逻辑与原代码一致... }
补充说明
- 方法一适合中小文件导出,大文件可能因Blob占用内存过高出现问题;
- 方法二更适合大文件场景,表单提交的方式更贴近浏览器原生下载逻辑;
- 确保后端返回的
File结果中,contentType和fileName参数设置正确,避免浏览器无法识别文件类型。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

