我有一个最小的API(或Web API?),应该接收表单数据(字段,加上一个文件)。
我读到我必须用[FromForm]
装饰我的端点以获得数据,但它不起作用。
当我提交表单,我得到一个错误(415不支持的媒体类型)它甚至没有达到应该打印"received"的程度;
我也尝试从邮递员发送表单数据,同样的错误返回(415)
下面是我的代码:const onSubmit = async (data: any) => {
setUploading(true);
// Add form values to formdata, including files
let formData = new FormData();
for (let key in data) {
if (key === "file") {
data.file.forEach((f: any) => {
formData.append("file", f.originFileObj);
});
continue;
}
formData.append(key, data[key]);
}
try {
const response = await axios.post("http://localhost:5210/file", formData, { headers: { "Content-Type": "multipart/form-data" } });
message.success("File sent successfully!");
form.resetFields();
} catch (error: any) {
console.log(error.response.data);
}
setUploading(false);
};
using Microsoft.AspNetCore.Mvc;
var builder = Microsoft.AspNetCore.Builder.WebApplication.CreateBuilder(args);
builder.Services.AddCors(options=> options.AddDefaultPolicy(builder => {builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod();} ));
var app = builder.Build();
app.UseCors();
app.MapPost("/file" ,([FromForm] FormData data)=>{
System.Console.WriteLine("Received");
return data;
});
app.Run();
My FormData
class:
public class FormData
{
public string? firstName { get; set; }
public string? lastName { get; set; }
public string? company { get; set; }
public string? sendTo { get; set; }
public IFormCollection? files { get; set;}
}
找到解决方案:.NET 6最小API和multipart/form-data
我要做的是删除[FromForm]
,因为它看起来不再支持。net 6。(https://learn.microsoft.com/en - us/aspnet/core/fundamentals/minimal apis?view=aspnetcore - 6.0 # explicit-parameter-binding)
我也不需要Model (FormData
)类来工作。
将我的端点更改为this解决了我的问题
app.MapPost("/file",(HttpContext ctx)=> {
var data = ctx.Request.Form; // form data is stored here
var files = ctx.Request.Form.Files; // files are stored here
return "Success";
});
返回数据的方式有点难看,所以现在我的下一个目标是清理它,但这是另一个主题。
数据是这样的:
[
{
"key": "firstName",
"value": [
"Mike"
]
},
{
"key": "lastName",
"value": [
"Jones"
]
},
{
"key": "company",
"value": [
"123Net"
]
},
{
"key": "sendTo",
"value": [
"Someone"
]
}
]