Post Content-type undefined和application / json同时

时间:2017-02-24 18:11:29

标签: javascript angularjs

我正在尝试上传文件并同时发布一些数据。 topicSelected的值是java脚本对象数组。当我检入c#控制器时,topicSelected的值为null。当我检查我的服务中的值时,一切正常。我认为问题在于我没有指定application / json类型。

setNewVideoRecord = function(file, videoName, videoVersion, topicSelected) {
    console.log(topicSelected);
    var self = this;
    var formData = new FormData();
    formData.append('file', file);
    formData.append('videoName', videoName);
    formData.append('videoVersion', videoVersion);
    formData.append('topicSelected', topicSelected);
    $http.post(self.baseUrl + "Admin/uploadVideoFile", formData, {
        withCredentials: true,
        headers: {
            'Content-Type': undefined
        },
        transformRequest: angular.identity
    }).then(function onSuccess(response) {
        self.fileNameUpload = null;
    })
}

1 个答案:

答案 0 :(得分:3)

您没有未定义的内容类型。告诉你的图书馆Content-Type是未定义的,只是停止尝试设置自己的默认值,让底层的XMLHttpRequest对象为自己找出它。由于您传递的是FormData对象,因此它将检查该对象以识别正确的内容类型(即multipart/mixed)。

这会将每个数据(包括您上传的文件)编码为一个单独的部分,每个部分都会自动设置自己的内容类型。

您无法使XHR将非文件数据编码为JSON。它将使用标准的多部分格式,每个非文件输入都有一个单独的部分(文件的另一部分)。

您需要编写服务器端代码以期望该格式而不是JSON。

由于topicSelected是一个复杂的数据结构(而不​​是字符串),您可以在将附加到表单数据对象之前通过JSON.stringify() 运行它。

读取topicSelected字符串后,可以从服务器上的JSON解析它。