Javascript MVC控制器在尝试使用Axios发送带有FormData的POST时接收空数据
我似乎无法找出控制器接收空数据的原因。我能够到达控制器,但没有数据传输。当我使用Postman使用Body和正确的键/数据内容测试API时,在控制器端一切都正常 我的控制器方法:Javascript MVC控制器在尝试使用Axios发送带有FormData的POST时接收空数据,javascript,c#,axios,asp.net-core-2.0,Javascript,C#,Axios,Asp.net Core 2.0,我似乎无法找出控制器接收空数据的原因。我能够到达控制器,但没有数据传输。当我使用Postman使用Body和正确的键/数据内容测试API时,在控制器端一切都正常 我的控制器方法: [Route("home/api/files")] public class FileController : ControllerBase { [HttpPost] public async Task<IActionResult> Post([FromForm] FileModel file)
[Route("home/api/files")]
public class FileController : ControllerBase
{
[HttpPost]
public async Task<IActionResult> Post([FromForm] FileModel file)
{
if (file == null)
return BadRequest("Given data is null");
if (string.IsNullOrEmpty(file.Name))
return BadRequest("File name is undefined");
if (string.IsNullOrEmpty(file.FolderPath))
return BadRequest("FolderPath is undefined");
if (file.File.Length < 0)
return BadRequest("File content is empty");
...
}
}
以及客户端Axios调用:
export function uploadFile(folderPath, data) {
console.log("upLoadFile", folderPath, data);
const formData = new FormData();
formData.set('name', data.file);
formData.set('extension', data.extension);
formData.set('folderPath', folderPath);
formData.append('file', data);
return axios.post(
"api/files",
formData,
{ headers: { 'Content-Type': 'multipart/form-data}' }})
//{ headers: { 'Content-Type': 'multipart/form-data; boundary=${form._boundary}' }})
.then((response) => {
console.log(response.data);
console.log(response.status);
})
.catch((error) => {
console.log(error);
});
}
我想问题在于我发送的数据类型?特别是,使用FileModel
sFile
属性类型ifformfile
。欢迎所有想法
已使用的Axios 0.19.2版本
我相信主要问题与我最初尝试的数据类型有关。重要的是,给定的
数据
的格式/类型正确
按照以下步骤正确定义数据:
const file = new Blob([data.contents], { type: 'text/csv' });
const formData = new FormData();
formData.set('Name', data.file);
formData.set('Extension', data.extension);
formData.set('FolderPath', folderPath);
formData.append('File', file);
const requestConfig = {
headers: {
"Content-Type": "multipart/form-data"
}
};
当formData
的定义如上所述时,以下Axios POST工作正常,控制器没有问题或更改,[FromForm]
工作正常
return axios.post(
"api/files",
formData,
requestConfig)
.then((response) => {
console.log(response.data);
})
.catch((error) => {
console.log(error);
});
您是否尝试将
[FromForm]
替换为[FromBody]
?使用[FromBody]
我收到控制器的回复:415不支持的媒体类型
。邮递员和Axios的回复是一样的。尝试将您的内容类型
更改为application/json
,基于Hmm,我尝试了以下方法:{headers:{'content type':'application/json'}}
,但没有产生任何影响。我仍在联系控制器,但文件
所有属性均为空
嗯,使用[FromBody]
并将内容类型
设置为应用程序/json
,然后由邮递员
尝试以行
的形式发送数据。请注意将数据类型设置为JSON(应用程序/类型)
-->
return axios.post(
"api/files",
formData,
requestConfig)
.then((response) => {
console.log(response.data);
})
.catch((error) => {
console.log(error);
});