C# 无法从null对象调用方法或检索属性。以下调用堆栈返回的对象为null

C# 无法从null对象调用方法或检索属性。以下调用堆栈返回的对象为null,c#,azure-functions,sharepoint-online,csom,C#,Azure Functions,Sharepoint Online,Csom,我正在使用CSOM和azure函数创建网站集。我的工作流是在创建网站后,首先使用GetAzureADAppOnlyAuthenticatedContext获取admin clientcontext。获取网站集clientcontext,然后设置网站属性,如将用户添加到组、网站所有者等。 在本地调试时,它运行良好,但有时会出现以下错误: Cannot invoke method or retrieve property from null object. Object returned by th

我正在使用CSOM和azure函数创建网站集。我的工作流是在创建网站后,首先使用GetAzureADAppOnlyAuthenticatedContext获取admin clientcontext。获取网站集clientcontext,然后设置网站属性,如将用户添加到组、网站所有者等。 在本地调试时,它运行良好,但有时会出现以下错误:

Cannot invoke method or retrieve property from null object. Object returned by the following call stack is null. \"AssociatedOwnerGroup\r\nRootWeb\r\nSite\r\nMicrosoft.SharePoint.SPContext.Current\r\n\""
我的代码是这样的:

public ClientContext GetAzureADOnlyClientContext(string SiteUrl, string appId, string tenant, X509Certificate2 certificate,bool isadmin)
        {
            ClientContext newClientContext;
            try
            {
                newClientContext = new AuthenticationManager().GetAzureADAppOnlyAuthenticatedContext(SiteUrl, appId, tenant, certificate);
                if (!isadmin)
                {
                    Web web = newClientContext.Web;
                    newClientContext.Load(web, w => w.Url);
                }
                newClientContext.ExecuteQuery();
                return newClientContext;
            }
            catch (Exception ex)
            {
                newClientContext = null;
                if (_logHelper != null)
                {
                    _logHelper.writeLog("GetAzureADContextError:"+ex.Message, TraceLevel.Error, ex);
                }
                return null;
            }
        }
主要功能

 while (ctxNew == null && count <= Constants.NEWSITE_TRYCOUNT)
                    {
                        logHelper.writeLog(string.Format("Site is being provisioned, waiting for {0} seconds ({1})", Constants.NEWSITE_SLEEP_SECONDS, count));
                        Thread.Sleep((int)Constants.NEWSITE_SLEEP_SECONDS * 2000);
                        //ctxNew = spHelper.GetClientContextByCredential(cred, true);
                        ctxNew = spHelper.GetAzureADOnlyClientContext(hostUrl, spAzureAppId, spTenant, certificate,false);

                        count++;
                    }

                    if (ctxNew == null)
                    {
                        logHelper.writeLog("New site collection could not be retrieved from " + hostUrl);
                    }
                    else
                    {
                        logHelper.writeLog("New site collection is created.");
                        Thread.Sleep((int)Constants.NEWSITE_SLEEP_SECONDS * 1000);
                        processRequestHelper = new ProcessRequestHelper(admClientContext, ctxNew, tenant, siteCreationInfo, log);
                        processRequestHelper.UpdateSite();
                        logHelper.writeLog(hostUrl + " has been updated.");
                    }



public void UpdateSite()
        {
            _logHelper.writeLog("Updating " + _newClientContext.Url);

            string description = _siteProperties.Description;
            string[] siteOwners = _siteProperties.BusinessOwnerEmail.Split(';');
            string[] members = _siteProperties.MemberEmails.ToArray();

            _tenant.SetSiteAdmin(_newClientContext.Url, _siteProperties.TechnicalOwnerEmail, true);
            _adminClientContext.ExecuteQuery();

            if (siteOwners.Length > 0)
            {
                AddGroupUser(_newClientContext.Site.RootWeb.AssociatedOwnerGroup, siteOwners);
            }

            if (members.Length > 0)
            {
                AddGroupUser(_newClientContext.Site.RootWeb.AssociatedMemberGroup, members);
            }

            if (!string.IsNullOrWhiteSpace(description))
            {
                _newClientContext.Site.RootWeb.Description = description;
                _newClientContext.Site.RootWeb.Update();
            }

            try
            {
                if (_newClientContext.HasPendingRequest)
                {
                    _newClientContext.ExecuteQuery();
                }

                _logHelper.writeLog("Site updated!");
            }
            catch (Exception ex)
            {
                _logHelper.writeLog("Update site error:"+ex.Message, TraceLevel.Error, ex);
                throw;
            }
        }

 private void AddGroupUser(Group grp, string[] usernameArr)
        {
            foreach (string username in usernameArr)
            {
                try
                {
                    _logHelper.writeLog("Add User " + username + " to group.");
                    User user = _newClientContext.Web.EnsureUser(username);
                    _newClientContext.Load(user);
                    grp.Users.AddUser(user);
                    _newClientContext.ExecuteQuery();
                }
                catch (Exception ex)
                {
                    _logHelper.writeLog("Add User " + username + ": " + ex.Message, TraceLevel.Error, ex);
                }
            }
        }
while(ctxNew==null&&count 0)
{
AddGroupUser(_newClientContext.Site.RootWeb.AssociatedOwnerGroup,siteOwners);
}
如果(members.Length>0)
{
AddGroupUser(_newClientContext.Site.RootWeb.AssociatedMemberGroup,成员);
}
如果(!string.IsNullOrWhiteSpace(说明))
{
_newClientContext.Site.RootWeb.Description=描述;
_newClientContext.Site.RootWeb.Update();
}
尝试
{
if(_newClientContext.HasPendingRequest)
{
_newClientContext.ExecuteQuery();
}
_logHelper.writeLog(“站点更新!”);
}
捕获(例外情况除外)
{
_logHelper.writeLog(“更新站点错误:+ex.Message,TraceLevel.error,ex”);
投掷;
}
}
私有void AddGroupUser(组grp,字符串[]usernameArr)
{
foreach(usernameArr中的字符串用户名)
{
尝试
{
_logHelper.writeLog(“将用户“+用户名+”添加到组。”);
User User=\u newClientContext.Web.EnsureUser(用户名);
_加载(用户);
grp.Users.AddUser(用户);
_newClientContext.ExecuteQuery();
}
捕获(例外情况除外)
{
_logHelper.writeLog(“添加用户”+用户名+:“+ex.Message,TraceLevel.Error,ex”);
}
}
}

有时,azure Function中的clientconetxt可能会变为null

当我调用context.Site.RootWeb.AssociatedOwnerGroup.Users.AddUser(用户)时,AssociatedOwnerGroup似乎会返回null;context.ExecuteQuery();