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

SharePoint Rest API插入列表项含斯堪的纳维亚字符时返回400错误

SharePoint REST API 创建列表项返回400错误的排查与解决

可能的原因及对应解决方案

1. 元数据类型名称错误

__metadata.type的值必须与列表的ListItemEntityTypeFullName完全一致,很多时候用户会误以为是SP.Data.列表名ListItem,但如果列表名称有特殊字符或者创建时的内部命名规则不同,实际值会有差异。

验证方法:
发送GET请求到以下端点获取正确的实体类型名称:

GET {site-url}/_api/web/lists/getbytitle('Test')?$select=ListItemEntityTypeFullName

将返回结果中的ListItemEntityTypeFullName值替换到请求负载的__metadata.type中。

2. 字段内部名称错误

FIRST_x0020_NAME是否为目标字段的真实内部名称?显示名称中的空格会被转换为_x0020_,但如果字段创建时曾修改过名称,内部名称可能和显示名称的转换结果不一致。

验证方法:

  1. 进入列表设置页面,点击目标字段(如"FIRST NAME")
  2. 查看浏览器地址栏的URL,找到&Field=后的参数值,该值即为字段的内部名称。

3. 手动设置冗余请求头导致不匹配

你手动设置了Host和Content-Length头,这两个头axios会自动根据请求上下文生成,手动设置可能出现以下问题:

  • Content-Length计算错误:你基于body.length计算的长度,和axios实际序列化JSON后的字节长度不一致,导致服务器判定请求非法。
  • Host头与实际请求的主机不匹配。

修正方法:移除这两个手动设置的头,仅保留必要的头信息。

4. 权限或令牌有效性问题

确保你的accessToken具有该列表的添加项权限,并且令牌未过期。可以通过调用其他需要相同权限的API(如获取列表项)验证令牌有效性。

修正后的Axios请求示例

const accessToken = "你的有效令牌";
const siteUrl = "https://****.sharepoint.com";

const payload = {
  "__metadata": { "type": "SP.Data.TestListItem" }, // 替换为实际获取的ListItemEntityTypeFullName
  "FIRST_x0020_NAME": "YÄSIR ALI"
};

axios.post(`${siteUrl}/_api/web/lists/getbytitle('Test')/items`, payload, {
  headers: {
    Authorization: `Bearer ${accessToken}`,
    'Content-Type': 'application/json;odata=verbose',
    Accept: 'application/json;odata=verbose'
  }
})
.then(response => {
  console.log("列表项创建成功:", response.data);
})
.catch(error => {
  // 打印详细错误信息,定位具体问题
  console.error("错误详情:", error.response?.data || error.message);
});

关键排查步骤

如果以上方法仍未解决问题,务必查看400错误的详细响应内容:在catch回调中打印error.response.data,SharePoint REST API会返回具体的错误描述(如"字段类型不匹配"、"元数据类型无效"等),这是快速定位问题的核心依据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:10:04