多部分/表单-数据ASP.. NET Core 6后端- 415不支持的媒体类型



我有一个最小的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"
        ]
    }
]

最新更新