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

问题描述

在LINQPad中使用以下代码,并使用最新的(3.24.2008)Office Online for SharePoint Online的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()中的 true 强制保存到SharePoint)

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

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

正在寻找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();

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...