OfficeDev PNP:AddClientSitePage 不与子站点一起使用

OfficeDev PNP : AddClientSitePage not working with a Subsite

在 LINQPad 中使用以下代码,使用最新的 (3.24.2008) OfficeDev SharePoint PnP Core Library for SharePoint Online

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() 中的 true 强制保存到 SharePoint)

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

据我所知,从 web.GetWeb() 返回的 ClientContext 仍然设置为父级的 (ussdallas) ClientContext ... 这就是页面的原因是在错误的网站上制作的。

正在查看 OfficeDev SharePoint PnP Core Library 的源代码...但我不知道如何“交换”上下文。我再做一个吗?此时用户已经登录。

是否有任何已知的解决方案?

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

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