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

使用SharePoint REST API删除列表项返回Bad Request,如何修复?

SharePoint REST API 删除列表项 Bad Request 问题修复

核心问题分析

你的代码存在几个关键错误,导致返回Bad Request:

  • 使用了错误的HTTP方法:删除列表项需要用DELETE而非POST
  • API地址错误:未定位到具体要删除的项,而是指向整个Items集合
  • 请求头拼写错误:MediaTypeWithQuailtyHeaderValue应为MediaTypeWithQualityHeaderValue
  • 冗余的请求体:删除操作不需要传递ID作为请求体
  • 缺少必填的请求验证头:SharePoint要求修改类请求携带X-RequestDigest

具体修改步骤

  1. 获取请求摘要(X-RequestDigest)
    先向{site}/_api/contextinfo发送POST请求获取请求摘要,这是SharePoint验证请求合法性的必填项:

    var digestResponse = await client.PostAsync($"{site}/_api/contextinfo", null);
    digestResponse.EnsureSuccessStatusCode();
    var digestContent = await digestResponse.Content.ReadFromJsonAsync<dynamic>();
    var requestDigest = digestContent.FormDigestValue;
    
  2. 修正HTTP方法与API地址
    针对具体ID的项发送DELETE请求,地址格式为{site}/_api/web/lists/GetByTitle('{list}')/Items({itemId})

  3. 修正请求头

    • 修复拼写错误,正确设置Accept和Content-Type头
    • 添加X-RequestDigest头
    • 若需要处理版本冲突,可添加IF-MATCH: *头(表示忽略版本直接删除)

修正后的完整代码

public async Task<HttpResponseMessage> DeleteListItem(string site, string list, int itemId)
{
    using var client = new HttpClient();

    // 获取请求摘要
    var digestResponse = await client.PostAsync($"{site}/_api/contextinfo", null);
    digestResponse.EnsureSuccessStatusCode();
    var digestContent = await digestResponse.Content.ReadFromJsonAsync<dynamic>();
    var requestDigest = digestContent.FormDigestValue;

    // 设置请求头
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    client.DefaultRequestHeaders.Add("X-RequestDigest", requestDigest);
    // 可选:忽略版本冲突直接删除
    client.DefaultRequestHeaders.Add("IF-MATCH", "*");

    // 发送DELETE请求到具体项
    var deleteUrl = $"{site}/_api/web/lists/GetByTitle('{list}')/Items({itemId})";
    return await client.DeleteAsync(deleteUrl);
}

额外注意事项

  • 确保当前用户对该列表项有删除权限
  • 若使用的是SharePoint Online,需确保HttpClient已正确处理身份验证(比如添加Bearer令牌)
  • 如果遇到版本相关错误,IF-MATCH: *可以强制删除,但可能会覆盖其他用户的修改,需谨慎使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:05:08