Web Api HttpResponseMessage没有返回文件下载

时间:2014-05-20 22:09:01

标签: excel asp.net-web-api

我正在对Web Api方法进行POST,并发布一个对象数组。当我到达方法时,我的参数被正确解析,然后我调用数据库并返回一个记录列表。

然后,我将这些记录转换为MemoryStream,由浏览器作为Excel spreasheet下载。从那里,我创建一个HttpResponseMessage对象并设置属性,以便浏览器将此响应识别为电子表格。

public HttpResponseMessage ExportSpreadsheet([FromBody]CustomWrapperClass request){
  var result = new HttpResponseMessage();

  var recordsFromDB = _service.GetRecords(request);

  MemoryStream export = recordsFromDB.ToExcel(); //custom ToExcel() extension method

  result.Content = new StreamContent(export);
  result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
  result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
  result.Content.Headers.ContentDisposition.Name = "formName";
  result.Content.Headers.ContentDisposition.FileName = "test.xlsx";

  return result;
}

没有看到正在下载的电子表格,似乎没有任何事情发生。当我检查开发人员工具(对于任何浏览器)时,我看到下面的响应标题,而响应选项卡只显示二进制数据。有谁知道我在这里可能会缺少什么?

enter image description here

1 个答案:

答案 0 :(得分:0)

你是怎么做的?听起来你可能正在尝试通过javascript AJAX调用,这是无法完成的(https://stackoverflow.com/a/9970672/405180)。 我会把它作为初学者的GET请求,并使用类似window.location =" download.action?para1 = value1 ...."。通常,web api Post请求用于创建文件/条目,而不是检索文件/条目。 或者,您可以使用带有与查询参数对应的隐藏元素的HTML表单,并使用javascript提交表单。