Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文档上载后的Sharepoint REST集元数据_C#_Rest_Sharepoint - Fatal编程技术网

C# 文档上载后的Sharepoint REST集元数据

C# 文档上载后的Sharepoint REST集元数据,c#,rest,sharepoint,C#,Rest,Sharepoint,我有一个C控制台应用程序,当它完成后,最终将成为一个windows服务。目的是将500k+文档存储迁移到SharePoint 2013 注意,这是一个独立的C应用程序,将在未安装SharePoint的服务器上运行。我通过HttpClient调用使用纯REST 上载文档并设置其元数据有3个步骤: 上传文件后 e、 g.baseURL+web/+GetFolderByServerRelativeUrl'/sites+libPath+'/Files/Addurl='+filename+',overwr

我有一个C控制台应用程序,当它完成后,最终将成为一个windows服务。目的是将500k+文档存储迁移到SharePoint 2013

注意,这是一个独立的C应用程序,将在未安装SharePoint的服务器上运行。我通过HttpClient调用使用纯REST

上载文档并设置其元数据有3个步骤:

上传文件后

e、 g.baseURL+web/+GetFolderByServerRelativeUrl'/sites+libPath+'/Files/Addurl='+filename+',overwrite=true

检索与此文档关联的列表项的详细信息获取

e、 g.baseURL+web/List/getbytitle'+docLibName+'/items?$filter=Title eq'+FileNameNoText+'

前两个步骤工作正常

更新元数据 这正是我现在失眠的原因。我似乎无法弄清楚到底应该向web服务发送什么,我尝试的任何东西都会出错。我找不到任何人试图这样做的例子;而且MS文档非常稀少

来自的MS文档说明:

下面的示例演示如何使用MERGE方法更新列表

url:http://siteurl/_-api/web/listsguid'list-GUID' 方法:邮寄 正文:{{u_元数据:{'type':'SP.List'},'Title':'newtitle'} 标题: 授权:承载+访问令牌 X-RequestDigest:表单摘要值 如果匹配:etag或* X-HTTP-Method:MERGE, 接受:application/json;odata=冗长 内容类型:application/json;odata=冗长 内容长度:帖子正文的长度

在我的应用程序中,我将查询中的类型设置为SP.Data.CertificatesItem,这是在步骤2中返回的;我正在尝试将证书类型字段设置为指定的值,而不是文档标题:

字符串体={'\uu metadata':{'type':'+spItemType+'},'CertificateType':'Medical Certificate'};

有几个字段需要设置;我只是在这里硬编码一个字段用于测试。需要设置的字段取决于文档库的内容类型

此外,URL略有不同。在该示例中:

http://siteurl/_-api/web/listsguid'list-GUID'

我有一个具体的例子,稍微匿名:

http://siteurl/_-api/Web/Listsguid'cdcbef76-8bc0-4a68-9279-f6f3b6cbd3c3'/Items2

否则,我的调用与上面的示例相同

我收到错误消息:

{错误:{代码:-1,Microsoft.SharePoint.Client.InvalidClientQueryException,消息:{lang:en-US,值:参数uu元数据在方法GetById中不存在。}}

我不明白我做错了什么!我在任何地方都找不到任何具体的例子

从页面::

如果要更新文件的元数据,则必须构造一个作为列表项到达文件的端点。您可以这样做,因为每个文件夹也是一个列表,每个文件也是一个列表项。构造一个如下所示的端点:https://siteurl/_-api/web/lists/getbytitle'Documents'/items。使用REST处理列表和列表项说明了如何更新列表项的元数据

有人能提供一些见解吗

更新:

似乎X-HTTP方法设置不正确。我解决了这个问题,现在我得到:


{错误:{代码:-1,Microsoft.SharePoint.Client.InvalidClientQueryException,消息:{lang:en-US,value:从JSON读取器读取时发现意外的“PrimitiveValue”节点。应为“StartObject”节点。}}}}

我自己在研究此问题时遇到了您的问题。我已经记录了如何使用HttpClient进行文件上传、创建、更新和检索列表项,包括那些在.NET中使用Termstore数据的列表项,而不需要JQuery

使用REST从HttpClient更新文件的示例:

client=new-HttpClientnew-HttpClientHandler{UseDefaultCredentials=true}; client.BaseAddress=new System.Uriurl; client.DefaultRequestHeaders.Clear; client.DefaultRequestHeaders.AddX-RequestDigest,digest; client.DefaultRequestHeaders.AddX-HTTP-Method,合并; client.DefaultRequestHeaders.AddIF-MATCH,*; HttpContent strContent=new StringContentString.Concat{'\uu metadata':{'type':'SP.List'},'Title':',filename'}; strContent.Headers.ContentType=新的MediaTypeHeaderValueapplication/json; strContent.Headers.ContentType.Parameters.Addnew NameValueHeaderValueodata,详细; HttpResponseMessageUpdateResponse=await client.PostAsyncString.Concat_api/web/lists/GetByTitle'Project Photos'/Items,id,strContent; updateResponse.ensureAccess状态代码; 如果updateResponse.IsSuccessStatusCode {}

希望这能有所帮助


Arcan.NET

请在回答问题时添加相关部分,记住链接可能过期 d和或坏了。