【发布时间】:2022-06-14 15:06:08
【问题描述】:
我编辑了整个问题,因为它很长而且令人困惑。
清晰、简洁的新问题
我将表单中的所有数据作为字符串化 JSON 发送,但现在我需要附加一个文件,所以我不能再这样做了。如何以允许附加文件的格式将表单数据从 React 发送到 ASP.NET Core API?
老问题
我有几种完美的表单:我使用 fetch 从 React 发送数据,并在我的 ASP.NET Core API 中正确接收它作为正文。
但是,我现在需要发送文件,但我不知道如何附加它们,因为我只是将我的所有内容都发送到一个精简的 JSON 中。
fetch("localhost/api/test", {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(body)
}).then(result => result.json()).then(
(result) => {
console.log(result);
}
);
我尝试发送这样构建的 FormData 对象,而不是 JSON.stringify(body)。
let formData = new FormData();
for (var property in body) {
formData.append(property, body[property]);
}
但是当我发送这个对象而不是字符串化的 JSON 时,ASP.NET Core 中的所有值总是为 null。
我也试过发送这个:
URLSearchParams(data)
还有这个:
let formBody = [];
for (var property in details) {
var encodedKey = encodeURIComponent(property);
var encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");
我尝试了每种数据编码类型的不同标头组合:
- 没有标题
'Content-Type': 'multipart/formdata''Content-Type': 'application/json''Content-Type': 'application/x-www-form-urlencoded'
我还尝试使用 [FromBody] 和 [FromForm] 从 ASP.NET 获取数据。
我想我已经尝试了上面解释的所有选项的所有可能组合,但没有结果。我总是在我的 API 中得到空值。
编辑:
现在,我什至没有尝试发送文件。在尝试附加文件之前,我正在尝试以正确的格式成功发送通用数据。我不知道我是否应该更改问题的标题。
这是我的 API 代码:
[HttpPost]
[Route("login")]
public object Login([FromBody] Credentials cred)
{
// check credentials
return CustomResult.Ok;
}
班级Credentials:
public class Credentials
{
public string Username { get; set; }
public string Password { get; set; }
}
来自 React 的对象 body 如下所示:
{
username: "user",
password: "pass"
}
【问题讨论】:
-
能否分享您的
API和React代码以了解您如何上传图像文件?这样就可以轻松解决了。 -
我什至没有文件输入。我只是想以不同的方式发送我的数据,因为我无法通过字符串化 JSON 发送文件,或者我可以吗?
-
您有两种方式,
IFormFile Image或图像为base64,其中图像将作为string提供 -
我花了相当长的时间来解决这个问题。使用 Postman 消除关于其前端还是后端的任何不确定性。您可以使用表单数据等来制作请求,然后确保 api 正常工作。一旦没问题,请使用浏览器上的调试工具查看您的客户端代码产生的请求。
-
@NAJ 使用邮递员是最好的选择。后端很好,问题是我用来将值附加到 formData 的
for循环。我在循环之后检查了该对象,它似乎没问题,但我决定尝试将其更改为Object.keys(data).forEach并且它起作用了。我仍然不明白为什么,但它有效
标签: javascript c# reactjs asp.net-core fetch-api