rest - 使用 REST api 更新 Sharepoint 元数据会出现 400 错误请求错误
问题描述
我正在尝试使用我的 Delphi 程序中的 Indy TidHTTP 组件更新 Sharepoint 文件的元数据。
在这个程序中,我成功地完成了我需要对 Sharepoint 文件执行的所有其他操作(创建/重命名/删除/编辑/签出等)。但是每当我尝试更新一些元数据属性时,我都会收到“400 Bad Request”异常。我知道我的 RequestDigest 字符串是正确的,因为我能够将新内容上传到文件中。
我已经看到报告了许多类似的问题,并且尝试了所有建议但没有成功。(一个建议是将文件作为列表项访问,而不是使用文件 url,我在下面的代码中已经这样做了。)
var
str,body,MyUrl: string;
stream: TStringStream;
begin
MyUrl:=MySite+'_api/web/Lists/getByTitle(''CM Library'')/Items(2)';
body:='{"__metadata":{"type":"SP.Data.CM_x0020_LibraryItem"},"Title":"UpdatedTitle"}';
stream := TStringStream.Create(body, TEncoding.UTF8);
try
IdHTTP.Request.Accept:='application/json;odata=verbose';
IdHTTP.Request.ContentType:='application/json';
IdHTTP.Request.ContentLength:=stream.size;
IdHTTP.Request.CustomHeaders.Values['X-RequestDigest']:=RequestDigest;
IdHTTP.Request.CustomHeaders.Values['IF-MATCH']:='*';
IdHTTP.Request.CustomHeaders.Values['X-HTTP-Method']:='MERGE';
try
str := IdHTTP.Post(MyUrl,stream);
except
on E : Exception do
ShowMessage('Exception: '+E.Message);
end;
finally
stream.Free;
end;
// Displays 'Exception: HTTP/1.1 400 Bad Request'
解决方案
我找到了!我需要将“;odata=verbose”添加到 Request.ContentType(以及 Request.Accept)
很抱歉给社区带来麻烦,但我为此苦苦挣扎了好几天!!
推荐阅读
- javascript - 有没有人知道pdfgeneratorapi.com的诀窍,我正在尝试通过服务器链接从api数据生成PDF,但不断出错
- stata - 以公斤和克为单位的一个变量。另一个表示哪个单位;我怎样才能得到以公斤为单位的新变量?
- r - 如何从具有相同前缀的.y中减去多个.x
- r - broom::tidy 在多项回归中失败
- python - 提取每列的值并将每个索引值存储在列表/字典中
- python - 如何在 SQLAlchemy 中获得类似 .issubset() 的东西?
- filter - 使用 FFT 的一阶差分滤波器的传递函数
- mysql - MySQL - 合并来自两个表的数据(它们位于不同的服务器上)
- r - R闪亮用消息替换空图
- java - 难以对用户输入的 10 个数字进行排序。必须使用数组和单独的排序方法