You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Asp.NET Core API与React交互出现415 Unsupported Media Type错误求助

排查Asp.NET Core API与React交互的415 Unsupported Media Type错误

核心排查方向

1. 请求内容类型不匹配

ASP.NET Core控制器接收的内容类型与Axios发送的类型必须一致。上传文件+文本时,必须使用multipart/form-data而非application/json,两者不能混用。

2. ViewModel绑定问题

  • 文件属性必须使用IFormFile(单文件)或List<IFormFile>(多文件)类型,无需添加JSON序列化特性(因为是表单提交):
public class UploadViewModel
{
    public string TextData { get; set; }
    public IFormFile File { get; set; }
}

3. 控制器方法配置错误

  • 必须用[HttpPost]标记,参数前添加[FromForm]特性(不能用[FromBody],否则会按JSON解析表单数据):
[ApiController]
[Route("api/upload")]
public class UploadController : ControllerBase
{
    [HttpPost]
    public IActionResult Upload([FromForm] UploadViewModel model)
    {
        if (model.File == null || model.File.Length == 0)
        {
            return BadRequest("文件不能为空");
        }
        // 处理文件与文本逻辑
        return Ok("上传成功");
    }
}
  • 禁止在控制器/方法上添加[Consumes("application/json")],否则会直接拒绝multipart/form-data请求。

4. Axios请求构造错误

  • 必须用FormData封装数据,禁止手动设置Content-Type(Axios会自动生成带边界值的multipart/form-data头,手动设置会导致ASP.NET Core无法解析):
// useState定义
const [textData, setTextData] = useState('');
const [selectedFile, setSelectedFile] = useState(null);

// 文件选择事件
const handleFileChange = (e) => {
    setSelectedFile(e.target.files[0]);
};

// 上传方法
const handleUpload = async () => {
    const formData = new FormData();
    // 键名必须与ViewModel属性名完全一致(C#大小写敏感)
    formData.append('TextData', textData);
    formData.append('File', selectedFile);
    
    try {
        const response = await axios.post('/api/upload', formData);
        console.log(response.data);
    } catch (error) {
        console.error('上传失败:', error.response);
    }
};

5. ASP.NET Core基础配置验证

确保Program.cs中启用了控制器与表单解析中间件(默认已启用,若有自定义配置需确认):

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();

var app = builder.Build();
app.UseRouting();
app.UseAuthorization();
app.MapControllers();
app.Run();

额外验证步骤

打开浏览器开发者工具(F12)→ Network标签页,查看上传请求:

  • 确认Request Headers的Content-Type为multipart/form-data; boundary=----WebKitFormBoundaryxxxxxx(带随机边界值)。
  • 确认Form Data中包含TextData和File的键值对,文件显示为(binary)。
  • 可先简化请求:只传文件或只传文本,逐步定位问题点。

内容的提问来源于stack exchange,提问作者TulaMagar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:57:19