首页 > 解决方案 > 如何声明一个空的 ClientContext

问题描述

我正在根据我的 .NET 代码中的 SharePoint 版本实施一种新的身份验证方法,该方法可能因 URL 而异。但是,我不确定如何声明一个空ClientContext变量。

下面是我的代码片段:

Uri lUri = new Uri(pSiteUrl);

//To declare an empty ClientContext variable here//

if (pSiteUrl.StartsWith(ConfigurationManager.AppSettings["New_URL"]))
{
    ClientContext lClientContext = SPOClientContext.GetAuthenticatedContext(pSiteUrl);
}
else
{
    ClientContext lClientContext = new ClientContext(pSiteUrl);
}

//lClientContext does not exists if it is not initialised outside the if-else statement above
Folder lRootFolder = lClientContext.Web.GetFolderByServerRelativeUrl(lUri.AbsolutePath + pFolderPath);

标签: c#.netsharepointclientcontext

解决方案


我不确定这是否有任何帮助,但我会尽力做到最好:)。

ClientContext 构造函数必须有一些参数 ->链接

所以你可以做的只是创建未初始化的 ClientContext 然后检查它是否不为空......这样的事情应该做(基于你的代码示例):



    ClientContext lClientContext = null;
    if (pSiteUrl.StartsWith(ConfigurationManager.AppSettings["New_URL"]))
    {
        lClientContext = SPOClientContext.GetAuthenticatedContext(pSiteUrl); // not sure what actually this is??
    }
    else
    {
        lClientContext = new ClientContext(pSiteUrl);
    }

    if (lClientContext != null)
    {
        Folder lRootFolder = lClientContext.Web.GetFolderByServerRelativeUrl(lUri.AbsolutePath + pFolderPath);
        lClientContext.Dispose();
    }


...请记住,ClientContext 应始终在最后处理

也许一些更清洁的选择是这样的(这样你就不需要考虑最后的 Dispose() 了)



    public void DoSomething()
    {
        string pSiteUrl = "";
        string somePath = "";
        using (var lClientContext = CreateClientContext(pSiteUrl))
        {
            Folder lRootFolder = lClientContext.Web.GetFolderByServerRelativeUrl(somePath);
        }
    }

    private ClientContext CreateClientContext(string uri) =>
        uri.StartsWith(ConfigurationManager.AppSettings["New_URL"]) ? 
            SPOClientContext.GetAuthenticatedContext(uri) : 
            new ClientContext(uri);



推荐阅读