我正在使用fineuploader将图像上传到ASP.NET 4.5 Web API控制器。控制器命中,图像上传。我从API控制器得到200响应。我在成功上传后显示缩略图,并且亚马逊S3中的位置文件名应该在JSON响应中返回。当我在Chrome或IE10中尝试此操作时,它可以正常工作。当我在Firefox中尝试此操作时,返回的responseJson
是一个空对象,显示为失败。我正在使用jQuery 1.8.2和fineuploader 3.2。我实际上在屏幕上显示undefined
因为responseJson.message
未定义。这是js代码:
(function ($) {
$('#file-uploader').fineUploader({
multiple: false,
request: {
endpoint: '/api/post-logo',
forceMultipart: false
},
// other setup options removed for brevity
}).on('complete', function (event, id, fileName, responseJson) {
if (responseJson.success) {
// for now, to illustrate the issue
alert(responseJson.savefilename);
} else {
$('#file-uploader').after("<span class='field-validation-error'>" + responseJson.message + "</span>");
}
});
})(jQuery);
回复的回复是application/json
。我需要做些什么才能在Firefox中正常运行?
答案 0 :(得分:3)
FF和Chrome之间的区别在于发送的Accept
请求标头。只需使用FireBug和Chrome开发人员工具栏来比较两个浏览器之间的结果:
FF:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
铬:
Accept: */*
因此,您可以看到FF没有发送正确的Accept
标头,而Web API的内容协商机制只是回退到text/xml
(因为这是客户端请求的内容)。
幸运的是,插件允许您使用customHeader
属性覆盖请求标头,并将其强制为预期类型(在您的情况下为application/json
):
request: {
endpoint: '/api/post-logo',
forceMultipart: false,
customHeaders: { Accept: 'application/json' }
},