2

我正在使用Fineuploader将图像上传到 ASP.NET 4.5 Web API 控制器。控制器被击中并上传图像。我从 API 控制器收到 200 响应。我在成功上传后显示缩略图,并且 Amazon 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 中正常工作?

4

1 回答 1

3

FF 和 Chrome 的区别在于Accept发送的请求标头。只需使用 FireBug 和 Chrome 开发人员工具栏来比较 2 个浏览器之间的结果:

法郎:

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' }
},
于 2013-02-17T11:35:20.943 回答