我正在对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;
}
没有看到正在下载的电子表格,似乎没有任何事情发生。当我检查开发人员工具(对于任何浏览器)时,我看到下面的响应标题,而响应选项卡只显示二进制数据。有谁知道我在这里可能会缺少什么?
答案 0 :(得分:0)
你是怎么做的?听起来你可能正在尝试通过javascript AJAX调用,这是无法完成的(https://stackoverflow.com/a/9970672/405180)。 我会把它作为初学者的GET请求,并使用类似window.location =" download.action?para1 = value1 ...."。通常,web api Post请求用于创建文件/条目,而不是检索文件/条目。 或者,您可以使用带有与查询参数对应的隐藏元素的HTML表单,并使用javascript提交表单。