我的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文件),但是从来没有显示对话框允许用户下载文件。
我错过了什么?
答案 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);