Javascript 使用Axios将表单数据过帐到.NET API

Javascript 使用Axios将表单数据过帐到.NET API,javascript,.net,asp.net-mvc,reactjs,axios,Javascript,.net,Asp.net Mvc,Reactjs,Axios,我使用React和Axios将formData发布到内部.NETAPI API需要如下数据: [HttpPost("upload")] public virtual async Task<IActionResult> PostMulti(Int64 parentId, ICollection<IFormFile> fileData) { foreach (var file in fileData) { awa

我使用React和Axios将formData发布到内部.NETAPI

API需要如下数据:

    [HttpPost("upload")]
    public virtual async Task<IActionResult> PostMulti(Int64 parentId, ICollection<IFormFile> fileData)
    {
        foreach (var file in fileData) {
            await SaveFile(file, parent);
        }

        return Created("", Map(Repository.Get(parentId)));
    }
我使用console.log进行调试。当我写出文件对象时,它会显示文件对象(名称、大小等)

它还会在方法的“.then”处理程序中激发,并显示以下内容:

响应--然后:数据:数组(0),状态:201,状态文本:“已创建” "

所以,我不知道它为什么不向API发送任何东西,我也不知道发生了什么,也不知道如何解决这个问题

任何帮助都将不胜感激


谢谢

您应该发布
formData的数组

const filesToSubmit = []
filesToSubmit.push((new FormData()).append('image', this.state.file))
axios({
    url: `/api/gameMethods/playerStates/${this.props.playerId}/files/upload`,
    method: 'POST',
    data: {formData : filesToSubmit},
    headers: {
        Accept: 'application/json',
        'Content-Type': 'multipart/form-data'
    }
})
发布数据时,属性名称应为
formData

const filesToSubmit = []
filesToSubmit.push((new FormData()).append('image', this.state.file))
axios({
    url: `/api/gameMethods/playerStates/${this.props.playerId}/files/upload`,
    method: 'POST',
    data: {formData : filesToSubmit},
    headers: {
        Accept: 'application/json',
        'Content-Type': 'multipart/form-data'
    }
})

如果在构造数组时出现问题,您需要将
ifformfile
属性添加到数组中

,因此我遇到了完全相同的问题,即无论我以何种方式扭曲
FormData
对象,也不管我发送的头是什么,我都无法让.NET接受提交

从Node.js的角度来看,很难实际检查Axios发出的HTTP调用,这意味着我看不到我实际发布的内容

因此,我将帖子移动到UI进行了一些调试,发现
FormData
负载没有像我预期的那样被传递,因此.NET拒绝是正确的

我最终使用了下面的配置,帖子开始浏览。同样,在我的例子中,我认为我需要
FormData
,但下面的内容非常简单:

axios({
    url: myUrl,
    method: 'POST',
    data: `email=${myEmail}`,
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    }
})
.then(response => {
    console.log(response);
    })
.catch(error => {
    console.error(error);
});
更新:不确定编码数据将如何工作,但由于它将作为字符串传递,因此值得一试

const myUploadedImage = "data:image/png;name=colors.png;base64,iVBORw0KGgoAAAANSUhEUgAAA5gAAAEECAIAAADCkQz7AAAGGUlEQVR4nO3YIY/IcRzHcWd4AjZJkZQr2I1dIJlyRU5ErkJggg=="

不幸的是,它不起作用。它似乎在前端工作,但当它被传递到API时,它是空的。我可以看到它如何在字符串(myEmail)中工作,但我不确定它在我的问题中是否工作,因为我正在尝试将上载的图像传递到API。@SkyeBoniwell很好,我更新了答案-因为它是base64编码的,这是一个字符串,值得一试,但谁知道呢。我严格地处理字符串形式的字段。