WebAPI中PUT请求返回400错误,其余请求正常,求排查原因
PUT请求返回400错误的原因及修复方案
核心问题
你的PUT请求前端代码存在两个关键错误:
- 错误设置了
Content-Type: application/json请求头,但实际发送的是FormData类型数据。浏览器会自动为FormData生成正确的multipart/form-data类型请求头(包含boundary分隔符),手动指定为json会导致后端无法解析表单数据,直接返回400错误。 - 错误添加了
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; }
额外验证点
- 确认后端PUT方法的参数名称与FormData中的键完全匹配:你的后端PUT方法接收
[FromForm] IFormFile? file,前端append的是'file',这部分是正确的; - 确认URI中的
itemId与FormData里jsonString中的id一致,避免出现ID不匹配的情况; - 如果仍有问题,可以在浏览器开发者工具的Network面板查看PUT请求的详情,检查Request Payload是否正确,以及后端返回的具体400错误信息(通常会包含解析失败的原因)。
内容的提问来源于stack exchange,提问作者Lucas Hoffmann
相关产品推荐
相关产品推荐

