博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[sharepoint]修改Item或者File的Author和Editor
阅读量:6342 次
发布时间:2019-06-22

本文共 4407 字,大约阅读时间需要 14 分钟。

写在前面

最近项目中调用sharepoint rest api方式获取文件或者Item列表,而用的方式是通过证书请求,在上传文件,或者新建item的时候,默认的用户是在sharepoint端注册的用户,并不能满足需求,需要对其进行修改。因为注册的app,会将该注册的clientid和issurid对应的应用程序作为一个新的用户。关于注册的方式可以参考之前写的几篇文章。

系列文章

代码

ClientContext spContext = new ClientContext("http://xxx//xxxx/xxx");                spContext.ExecutingWebRequest += spContext_ExecutingWebRequest;                Web website = spContext.Web;                spContext.Load(website);                Microsoft.SharePoint.Client.File file = website.GetFileByServerRelativeUrl(serverReleativeUrl);                ListItem item = file.ListItemAllFields;                string loginName = @"i:0#.w|domain\" + _siteInfo.UserName;                User user = spContext.Web.EnsureUser(loginName);                item["Editor"] = user;                item["Author"] = user;                file.ListItemAllFields.Update();                spContext.ExecuteQuery();

验证

public void spContext_ExecutingWebRequest(object sender, WebRequestEventArgs e)        {            HttpWebRequest webReq = e.WebRequestExecutor.WebRequest;            TokenHelper.ClientId = _siteInfo.ClientId;            TokenHelper.IssuerId = _siteInfo.IssureId;            var accessToken = TokenHelper.GetS2SAccessTokenWithWindowsIdentity(new Uri(_siteInfo.AppUrl), null);            webReq.Method = "Post";            webReq.Accept = "application/json;odata=verbose";            webReq.Headers.Add("Authorization", "Bearer " + accessToken);        }

修改Item类似

///         /// 修改Item的作者和编辑者        ///         ///         ///         ///         public static void UpdateItemAuthor(SiteInfo siteInfo, string itcode, int itemId)        {            ClientContext spContext = new ClientContext(siteInfo.Url);            spContext.ExecutingWebRequest += spContext_ExecutingWebRequest;            Web web = spContext.Web;            spContext.Load(web);            spContext.ExecuteQuery();            List lst = web.Lists.GetById(new Guid(siteInfo.ListId));            spContext.Load(lst);            spContext.ExecuteQuery();            ListItem item = lst.GetItemById(itemId);            string loginName = @"i:0#.w|lenovo\" + itcode;            User user = web.EnsureUser(loginName);            item["Author"] = user;            item["Editor"] = user;            item.Update();            spContext.ExecuteQuery();        }

在修改或者新建item或者File的时候需要先获取contextinfo

///         /// 获得contextinfo        ///         ///         /// 
private static string GetContextInfo(SiteInfo siteInfo) { HttpWebRequest contextInfoRequest = null; HttpWebResponse contextInfoEndpointResponse = null; StreamReader contextInfoStream = null; try { Uri hostWebUri = new Uri(siteInfo.Url); TokenHelper.ClientId = siteInfo.ClientId; TokenHelper.IssuerId = siteInfo.IssureId; var accessToken = TokenHelper.GetS2SAccessTokenWithWindowsIdentity(hostWebUri, null); //获取contextinfo contextInfoRequest = (HttpWebRequest)HttpWebRequest.Create(siteInfo.Url + "/_api/contextinfo"); contextInfoRequest.Method = "POST"; contextInfoRequest.Accept = "application/json;odata=verbose"; contextInfoRequest.ContentLength = 0; contextInfoRequest.Headers.Add("Authorization", "Bearer " + accessToken); contextInfoEndpointResponse = (HttpWebResponse)contextInfoRequest.GetResponse(); contextInfoStream = new StreamReader(contextInfoEndpointResponse.GetResponseStream(), Encoding.UTF8); string strContextInfoJson = contextInfoStream.ReadToEnd(); return strContextInfoJson; } catch (Exception ex) { throw ex; } finally { if (contextInfoEndpointResponse != null) { contextInfoEndpointResponse.Dispose(); } if (contextInfoStream != null) { contextInfoStream.Dispose(); } } }

总结

如果在请求的时候能带上账户信息,是最简单的一种方式,默认的就是当前的用户信息。比如spContext.Credentials =new NetWorkCredentials (uid,pwd,domain);或者在模拟请求的时候request.Credentials =new NetWorkCredentials (uid,pwd,domain);这种方式就不用再次请求进行修改文件或者item的属性了。默认的就是当前请求的用户。

转载于:https://www.cnblogs.com/wolf-sun/p/4756088.html

你可能感兴趣的文章
将十进制数转换为IEEE754格式
查看>>
读书杂谈一
查看>>
winform listbox 元素显示tooltrip
查看>>
cacti安装与配置
查看>>
TF-IDF与余弦相似性的应用(一):自动提取关键词
查看>>
javascript面向对象2
查看>>
限制容器对CPU的使用 - 每天5分钟玩转 Docker 容器技术(28)
查看>>
jquery 实现的一个 随机云标签网页背景
查看>>
RPC
查看>>
android广播事件处理broadcast receive
查看>>
在eclipse 里面 修改tomcat的配置--Server Locations
查看>>
网站 mvc url 路径 设置 为 *.html 的原因
查看>>
mybatis 开启使用 默认的 二级缓存
查看>>
docker 容器 创建和 使用
查看>>
我的友情链接
查看>>
SQLITE使用指南
查看>>
《java编程思想》学习笔记—访问权限控制
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Red Hat7版本本地仓库yum源的配置
查看>>