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

WebAPI中PUT请求返回400错误,其余请求正常,求排查原因

PUT请求返回400错误的原因及修复方案

核心问题

你的PUT请求前端代码存在两个关键错误:

  1. 错误设置了Content-Type: application/json请求头,但实际发送的是FormData类型数据。浏览器会自动为FormData生成正确的multipart/form-data类型请求头(包含boundary分隔符),手动指定为json会导致后端无法解析表单数据,直接返回400错误。
  2. 错误添加了contentType: 'false'和processData: 'false'配置项——这两个是jQuery.ajax的专属参数,fetch API并不支持,写在这里完全无效。

对比你的POST请求代码,它没有设置错误的Content-Type请求头,所以能正常工作。

修正后的PUT请求前端代码

function updateItem() {
    const itemId = document.getElementById('edit-id').value;
    const item = {
        id: itemId,
        name: document.getElementById('edit-name').value.trim(),
        text: document.getElementById('edit-text').value.trim(),
    };

    const formData = new FormData();
    formData.append('file', document.getElementById('edit-file').files[0]);
    formData.append('jsonString', JSON.stringify(item));

    fetch(`${uri}/${itemId}`, {
        method: 'PUT',
        headers: {
            'Accept': 'application/json' // 保留Accept即可,不需要Content-Type
        },
        body: formData
    })
        .then(() => getItems())
        .catch(error => console.error('Unable to update item.', error));

    closeInput();

    return false;
}

额外验证点

  1. 确认后端PUT方法的参数名称与FormData中的键完全匹配:你的后端PUT方法接收[FromForm] IFormFile? file,前端append的是'file',这部分是正确的;
  2. 确认URI中的itemId与FormData里jsonString中的id一致,避免出现ID不匹配的情况;
  3. 如果仍有问题,可以在浏览器开发者工具的Network面板查看PUT请求的详情,检查Request Payload是否正确,以及后端返回的具体400错误信息(通常会包含解析失败的原因)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:46:08