使用RestSharp调用SharePoint API创建文件夹时遇BadRequest错误
问题描述
基于.NET 6开发控制台应用,使用RestSharp调用SharePoint REST API创建文件夹时,收到BadRequest响应,错误信息:
"The property '__metadata' does not exist on type 'SP.Folder'. Make sure to only use property names that are defined by the type"
已在请求头指定Accept和Content-Type为application/json;odata=verbose,但问题仍未解决。
问题根源
RestSharp的AddJsonBody方法会自动覆盖请求的Content-Type头为application/json,而非你手动设置的application/json;odata=verbose。这导致SharePoint API未按OData Verbose模式解析请求体,因此无法识别__metadata属性。
解决方案
放弃使用AddJsonBody,改为手动序列化请求体为JSON字符串,并通过AddParameter方法指定正确的内容类型:
修改后的代码
using System.Text.Json; // ... 其他代码 ... var request = new RestRequest { Resource = $"{RESOURCE}/_api/web/folders", Method = Method.Post }; request.AddHeaders(new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("Authorization", $"Bearer {_accessToken}"), new KeyValuePair<string, string>("Accept", "application/json;odata=verbose"), new KeyValuePair<string, string>("Content-Type", "application/json;odata=verbose") }); // 手动序列化请求体 var folderPayload = new { __metadata = new { type = "SP.Folder" }, ServerRelativeUrl = $"ContainedFolder/{FolderName}" }; var jsonPayload = JsonSerializer.Serialize(folderPayload); // 添加请求体并指定正确的内容类型 request.AddParameter("application/json;odata=verbose", jsonPayload, ParameterType.RequestBody); var response = await _client.ExecuteAsync(request); if (response == null || response.StatusCode != expectedStatus) throw new Exception($"Unable to create folder. StatusCode: {response?.StatusCode}. Error: {response?.ErrorMessage}. RawContent: {response?.Content}"); return response;
额外检查点
- 确认
RESOURCE为SharePoint站点的完整根URL(例如https://yourtenant.sharepoint.com/sites/yoursite) - 确认
ServerRelativeUrl是正确的服务器相对路径,需包含站点路径(例如站点为/sites/yoursite时,路径应为/sites/yoursite/ContainedFolder/{FolderName})
内容的提问来源于stack exchange,提问作者Johan Pino
相关产品推荐
相关产品推荐

