我目前正在寻找一种方法来强制下载通过 WebAPI 控制器返回的文件。
我使用http://www.shawnmclean.com/blog/2012/04/force-download-of-file-from-asp-net-webapi/作为参考。
在我的客户端上,我使用 ajax GET 调用来发送对象的 ID 并尝试下载文件
exportList: (foo, callback) =>
path = '/api/export/id'
path = path.replace("id", foo.id)
$.ajax(
url: path,
dataType: 'text',
success: (data) =>
callback(data)
error: (data) =>
callback(false)
)
在服务器端,我将上面的 URI 路由到下面的方法
[AcceptVerbs("GET")]
public HttpResponseMessage ExportList(int id)
{
string file = fooService.ExportList(id);
if (file == null)
{
return Request.CreateResponse(HttpStatusCode.NoContent);
}
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new StringContent(file);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = "List.csv";
return result;
}
fooService.ExportList 方法只是创建一个 csv 字符串。
当看到请求返回客户端时,响应中确实包含 csv 字符串,但客户端没有被提示或强制下载它。
这是解决这个问题的正确方法吗?