首页 > 解决方案 > OfficeDev PNP:AddClientSitePage 无法与子站点一起使用

问题描述

在 LINQPad 中使用以下代码,使用用于 SharePoint Online 的最新 (3.24.2008) OfficeDev SharePoint PnP 核心库

void Main()
{
    var baseSite = "https://contoso.sharepoint.com";
    var sharepointSite = "/ussdallas";
    var siteUrl = $"{baseSite}{sharepointSite}";
    var userEmailAddress = "nhodge@contoso.onmicrosoft.com";

    var pageName = "ContosoMarketResearch.aspx";
    
    var authenticationManager = new OfficeDevPnP.Core.AuthenticationManager();

    var context = authenticationManager.GetSharePointOnlineAuthenticatedContextTenant(siteUrl, "nhodge@contoso.onmicrosoft.com", "contoso!contoso");
    
    var web = context.Web;

    context.Load(web);
    context.ExecuteQuery(); 

    var subSite = web.GetWeb("redoctober"); // the "sub site" of the "ussdallas" site is "redoctober"

    var subSitePage = subSite.AddClientSidePage(pageName, true);
    
    subSitePage.Save();
        
}

真实AddClientSidePage()强制保存到 SharePoint)

结果ClientSidePage 是在ussdallas的站点页面库而不是redoctober子站点的站点页面库中构建的。

从我可以确定的ClientContext返回 fromweb.GetWeb()仍然设置为 Parent 的 ( ussdallas) ClientContext...这就是为什么该页面是在错误的 Web 中创建的。

查看OfficeDev SharePoint PnP Core Library...的来源,但我无法弄清楚如何“交换”上下文。我再做一个吗?此时用户已经登录。

有什么已知的解决方案吗?

标签: sharepointcsom

解决方案


您可以尝试通过以下方式交换上下文:

      context= authenticationManager.GetSharePointOnlineAuthenticatedContextTenant(siteUrl + "/sub1", userName, password);
      var subSite = context.Web;
      context.Load(subSite);
      context.ExecuteQuery();
      var subSitePage = subSite.AddClientSidePage(pageName, true);
      subSitePage.Save();

推荐阅读