【问题标题】:Read site page contents in Sharepoint using CSOM使用 CSOM 在 Sharepoint 中读取网站页面内容
【发布时间】:2018-02-02 04:11:17
【问题描述】:

在我的项目中,我需要将网站页面存储在本地。这些页面可能是已发布或未发布的页面。我已尝试使用以下代码,但无法获取页面内容。

ClientContext clientcontext = new ClientContext(url);
   var credentials = new SharePointOnlineCredentials(userid, SecurePass);
   clientcontext.Credentials = credentials;
   Web web = clientcontext.Web;
   clientcontext.Load(web, website => website.Lists);
   clientcontext.ExecuteQuery();
   clientcontext.Load(web, website => website.Lists,
                             website => website.Lists.Where(
                             x => x.BaseTemplate == 119));

   clientcontext.ExecuteQuery();
   var _collection = web.Lists;
   foreach (var pages in _collection)
   {

       clientcontext.Load(pages);
       clientcontext.ExecuteQuery();

       CamlQuery cq = new CamlQuery();
       var pg = pages.GetItems(cq);
       clientcontext.Load(pg);
       clientcontext.ExecuteQuery();
       foreach (var item in pg)
       {
           clientcontext.Load(item);
           clientcontext.ExecuteQuery();
           var f_webPage = clientcontext.Web.GetFileByServerRelativeUrl(item.File.ServerRelativeUrl);
           clientcontext.Load(f_webPage);
           clientcontext.ExecuteQuery();

       }
  }

如何获取网站页面内容? 提前致谢。

【问题讨论】:

    标签: c# sharepoint sharepoint-online csom


    【解决方案1】:

    在站点页面库(ListTemplateType.WebPageLibrary 的列表类型)中,列表项的内容取决于内容类型的下属,可以从:

    • WikiField 字段在Wiki Page 的情况下
    • CanvasContent1 字段,如果是 Site Page(又名 "modern" page

    例子

    var listTitle = "Site Pages";
    var list = ctx.Web.Lists.GetByTitle(listTitle);
    var items = list.GetItems(CamlQuery.CreateAllItemsQuery());
    ctx.Load(items, icol => icol.Include( i => i["WikiField"], i => i["CanvasContent1"], i => i["FileRef"], i => i.ContentType));
    ctx.ExecuteQuery();
    foreach (var item in items)
    {
         Console.WriteLine(">>> {0}", item["FileRef"]);
         switch (item.ContentType.Name)
         {
            case "Site Page":
              Console.WriteLine(item["CanvasContent1"]);
              break;
            case "Wiki Page":
              Console.WriteLine(item["WikiField"]);
              break;
    
         }    
     }
    

    【讨论】:

    • 为什么这个问题被标记为解决方案!?这不是问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 2017-10-08
    相关资源
    最近更新 更多