C# 无法在SharePoint联机列表中创建文件夹

C# 无法在SharePoint联机列表中创建文件夹,c#,microsoft-graph-api,sharepoint-online,microsoft-graph-sdks,C#,Microsoft Graph Api,Sharepoint Online,Microsoft Graph Sdks,上一个问题:由我们的英雄和讨厌的版主关闭,他们冲进来标记所有错误,但一旦你编辑它以满足他们的异常需求,没有人投票重新打开它,因为他们已经做了自己的一部分 所以,请有人向我解释一下,如何在SharePoint Online列表中正确创建文件夹 我尝试先使用C#SDK创建它,但没有成功 var folder = new DriveItem { Name = plan.Title, Folder = new Folder() }; await graphServiceClient .Sites["o

上一个问题:由我们的英雄和讨厌的版主关闭,他们冲进来标记所有错误,但一旦你编辑它以满足他们的异常需求,没有人投票重新打开它,因为他们已经做了自己的一部分

所以,请有人向我解释一下,如何在SharePoint Online列表中正确创建文件夹

我尝试先使用C#SDK创建它,但没有成功

var folder = new DriveItem
{
Name = plan.Title,
Folder = new Folder()
};

await graphServiceClient
.Sites["ourdomain.sharepoint.com:/sites/ITOddeleni:"]
.Lists["Planner"]
.Drive
.Root
.Children
.Request()
.AddAsync(folder);
然后我开始使用Graph Explorer,找到文件夹的ContentType ID,并尝试将其创建为指定了ContentType的项目

这是JSON请求头,导致在列表中创建文件夹,但它没有名称,因为文件夹在SharePoint中的行为与项目不同

{
"Title" : "Test2",
"contentType": { "id": "0x012000FC4989A03C9F7845AD8C206E2F47A0FD" }
}
我试图将“Title”改为“Name”、“FileLeafRef”以及任何可能是文件夹内部名称的名称,但无法理解。它接受了所有请求头,但创建的文件夹名称仍然为空

感谢您的帮助

编辑:

我试过Vadim的建议,文件夹真的被创建了,第一次看到它似乎带有您在代码中指定的名称。但它也带有一些生成的名称,请参见图片的右侧

打开文件夹后,您会丢失名称,直到刷新文件夹所在级别的页面。这是打开文件夹时的外观

我还尝试在标题之外添加name/name,但它会返回
“消息:字段名”既不是“下”也不是“大写”。

你考虑过CSOM还是它不是一个选项?SharePoint online的最佳选择是使用CSOM PnP nuget

代码应该如下所示:


    try
    {
        string siteUrl = "SiteUrl";
        AuthenticationManager authManager = new AuthenticationManager();
        using (ClientContext context = authManager.GetWebLoginClientContext(siteUrl))
        {
            List list = context.Web.Lists.GetByTitle("LibName");
            context.Load(list);
            context.ExecuteQuery();
            Folder folder = list.RootFolder.CreateFolder("NewFolder");
        }
    }
    catch (Exception ex)
    {
        // log error
        throw;
    }

我已经用一些控制台应用程序测试了上面的代码,结果是


我希望这会对你有所帮助:

< P>你考虑过CSOM还是它不是一个选项?SharePoint online的最佳选择是使用CSOM PnP nuget

代码应该如下所示:


    try
    {
        string siteUrl = "SiteUrl";
        AuthenticationManager authManager = new AuthenticationManager();
        using (ClientContext context = authManager.GetWebLoginClientContext(siteUrl))
        {
            List list = context.Web.Lists.GetByTitle("LibName");
            context.Load(list);
            context.ExecuteQuery();
            Folder folder = list.RootFolder.CreateFolder("NewFolder");
        }
    }
    catch (Exception ex)
    {
        // log error
        throw;
    }

我已经用一些控制台应用程序测试了上面的代码,结果是

我希望它能有所帮助:)

列表中的文件夹可以通过以下方式创建:

POST https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/items
Content-Type: application/json

{
  "fields": {
    "Title": "Folder name goes here",
  },
  "contentType": { "id": "0x0120" }
}
在哪里

  • 文件夹属性(如标题)通过指定
  • 要创建文件夹类型的项,需要明确指定设置为
    0x0120
    contentType
    属性
C#示例

var folderItem = new ListItem
{
    ContentType = new ContentTypeInfo()
       {
           Id = "0x0120"
       },
       Fields = new FieldValueSet()
               {
                    AdditionalData = new Dictionary<string,object>
                    {
                        {
                            "Title", folderName
                        }
                    }
                }
};

await graphClient
       .Sites.Root
       .Lists["<list name or id>"]
       .Items
       .Request()
       .AddAsync(folderItem);
var folderItem=新列表项
{
ContentType=新的ContentTypeInfo()
{
Id=“0x0120”
},
Fields=新的FieldValueSet()
{
AdditionalData=新字典
{
{
“标题”,文件夹名称
}
}
}
};
等待graphClient
.Sites.Root
.列表[“”]
.项目
.Request()
.AddAsync(folderItem);
列表中的文件夹似乎可以通过以下方式创建:

POST https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/items
Content-Type: application/json

{
  "fields": {
    "Title": "Folder name goes here",
  },
  "contentType": { "id": "0x0120" }
}
在哪里

  • 文件夹属性(如标题)通过指定
  • 要创建文件夹类型的项,需要明确指定设置为
    0x0120
    contentType
    属性
C#示例

var folderItem = new ListItem
{
    ContentType = new ContentTypeInfo()
       {
           Id = "0x0120"
       },
       Fields = new FieldValueSet()
               {
                    AdditionalData = new Dictionary<string,object>
                    {
                        {
                            "Title", folderName
                        }
                    }
                }
};

await graphClient
       .Sites.Root
       .Lists["<list name or id>"]
       .Items
       .Request()
       .AddAsync(folderItem);
var folderItem=新列表项
{
ContentType=新的ContentTypeInfo()
{
Id=“0x0120”
},
Fields=新的FieldValueSet()
{
AdditionalData=新字典
{
{
“标题”,文件夹名称
}
}
}
};
等待graphClient
.Sites.Root
.列表[“”]
.项目
.Request()
.AddAsync(folderItem);

Hello Adam,谢谢你的建议,但这应该只是图形项目,因为它应该能够以某种方式创建文件夹…:-)一定有办法,Hello Adam,谢谢你的建议,但这应该只是图形项目,因为它应该能够以某种方式创建文件夹…:-)必须有一种方法来说明您尝试的每个选项是如何失败的。假设所讨论的列表是一个文档库,C#示例应该可以工作。如果它是一个文档库,我会说它是文档库,这只是一个列表。C#代码返回:代码:-1,Microsoft.SharePoint.Client.ResourceNotFoundException消息:找不到请求的资源Microsoft.FileServices.FileService/Sites('50cb05fa-27f9-45bf-a5f3-5f82e0e2eb00')/List('ad52e785-c9b7-4106-af7b-a3394462875c')/drive/。在图形浏览器中调用了其他方法,未返回错误,但是创建的文件夹没有名称。因为我正在将其创建为指定了contentType的项。显示您尝试的每个选项是如何失败的将非常有用。假设所讨论的列表是一个文档库,C#示例应该可以工作。如果它是一个文档库,我会说它是文档库,这只是一个列表。C#代码返回:代码:-1,Microsoft.SharePoint.Client.ResourceNotFoundException消息:找不到请求的资源Microsoft.FileServices.FileService/Sites('50cb05fa-27f9-45bf-a5f3-5f82e0e2eb00')/List('ad52e785-c9b7-4106-af7b-a3394462875c')/drive/。在图形浏览器中调用了其他方法,未返回错误,但是创建的文件夹没有名称。由于我将其创建为指定了contentType的项目。您好,瓦迪姆,感谢您的回复:-)文件夹已创建,但问题来了。起初它看起来很好,文件夹被创建了,它有指定的名称,但是一旦你打开文件夹,它的名称在我的情况下会转换为“3163_uu0.000”,并保持不变,直到我刷新页面时,它带有名称,直到我点击它。。。奇怪。请参见编辑。@MarekKyzivát,事实上,
FileLeafRef
似乎是以以下格式创建的
\uuu000
。您好