AJAX POST不返回文件下载

时间:2015-08-31 01:43:28

标签: ajax asp.net-mvc post asp.net-web-api

我的ASP.NET MVC应用程序中有一个POST AJAX请求,其工作原理如下:

$.ajax({
    type: "POST",
    url: 'https://localhost:44300/api/values',
    data: ruleData,
    contentType: "application/json; charset=utf-8"
});

在这种情况下,ruleData包含JSON blob:

var ruleData = JSON.stringify({
    'TargetProduct': "SomeProduct",
    'Content': editor.getValue(),
    'TargetProductVersion' : "1.0"
});

请求由Web API应用程序中处理的POST支持,该应用程序返回带有相应标头的PushStreamContent

return new HttpResponseMessage(HttpStatusCode.OK) { Content = pushStreamContent};

在Fiddler中,我看到Web API的响应以application/octet-stream的形式返回,其大小与我期望的一样(它在后端生成一个ZIP文件),但是从来没有显示对话框允许用户下载文件。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

用XHR解决

var xhr = new XMLHttpRequest();
                xhr.responseType = "blob";
                xhr.onreadystatechange = function(){
                    if (this.readyState == 4) {
                        if (this.status == 200)
                            {
                            download(xhr.response, "bundle.zip", "application/zip");
                        }
                        else if (this.status == 400) {
                            var reader = new FileReader();
                            reader.onload = function(e) {
                                var text = reader.result;
                                alert(text);
                            }
                            reader.readAsText(xhr.response);
                        }
                    }
                }
                xhr.open('POST', 'https://localhost:44300/api/values');
                xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
                xhr.responseType = 'blob'; // the response will be a blob and not text
                xhr.send(ruleData);