我已经创建了一个端点,它接受CSV文件,解析它(在CsvHelper的帮助下),进行一些转换,然后将该数据持久化到我的SQL Server数据库。我能够通过API很好地传递CSV文件,但是我遇到了一个问题,将这个端点连接到我的React前端,我可以通过UI上传CSV并调用端点来完成其余的工作。而是抛出了400:“Object reference not set to an instance of an object”错误。我已经看过了一吨的SO职位,有一个类似的问题,以我和尝试的解决方案,但他们都没有为我的情况工作。
FileModel类:
public class FileModel
{
public IFormFile FormFile { get; set; }
}
上传端点:
// I have these attributes here since the CSVs I will be uploading are pretty large.
[DisableRequestSizeLimit]
[RequestFormLimits(MultipartBodyLengthLimit = 234217728)]
[HttpPost("Upload")]
public async Task<ActionResult> CsvUpload([FromForm] FileModel file)
{
// Endpoint does the parsing and persisting here...
}
我不认为问题在于我在端点内做了什么,所以我省略了这一点,但如果需要,请让我知道。
React.js:
const reqHeaders = {
headers: {
'Accept': 'application/json, application/octet-stream, application/csv, text/plain, application/x-www-form-urlencoded, multipart/form-data, text/csv, */*',
},
}
let formData = new FormData()
formData.append('file', new Blob([fileSelector.current.files[0]]))
apiCalls.post("https://localhost:44323/api/MyController/Upload", formData, reqHeaders).then((res) => {
console.log(res)
setShowSnackbarSuccess(true)
setSnackbarMessage(`Successfully uploaded the data.`)
}).catch((e) => {
console.error(e)
setShowSnackbarError(true)
setSnackbarMessage('Failed to upload the data.')
}).finally(() => {
setShowBusyDialog(false)
setShowUploadProgressModal(false)
fileSelector.current.value = null
})
是否需要在FormData对象后追加文件名,或者需要在头文件中添加某些内容?在这一点上,我不太确定这是否是前端或后端的问题,因此最好了解为什么会抛出错误。此外,React代码不是我的代码,而是我的合作伙伴的代码,所以我会尽我所能回答它。
先谢谢你了!
1条答案
按热度按时间mec1mxoz1#
此方法是否:
驻留在继承以下内容的控制器中:ControllerBase?
如果是这样,也许您甚至不需要[FromForm] FileModel文件
下面的代码应该能够处理上传的文本文件: